Python WebDriver AttributeError:LoginPage实例没有“driver”属性

2024-09-27 09:22:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经阅读了一些关于Python Selenium Webdriver页面对象模型的教程,因为我必须在Python中使用Selenium自动化gui测试。

首先,我试图编写一个Login-Page类和一个LoginMainTest类。运行代码时出现以下错误。

属性错误:LoginPage实例没有属性“driver”

我想我必须指定selenium驱动程序,在其中实例化LoginPage e、 g.在这行上,log in=LoginPage.LoginPage()

我需要一些帮助。

完全错误:

Traceback (most recent call last):
File "E:\Python projects\unitTest_sample - Modifying into Page Object\LoginMainTest.py", line 11, in test_valid_login
log_in = LoginPage.LoginPage()
File "E:\unitTest_sample - Modifying into Page Object\LoginPage.py", line 20, in __init__
emailFieldElement  = self.driver.find_element_by_id(self.emailFieldID)
AttributeError: LoginPage instance has no attribute 'driver'

我的LoginMainTest.py类如下:

import LoginPage
import unittest

class GoogleTest(unittest.TestCase):

  def test_valid_login(self):
    log_in = LoginPage.LoginPage()
    log_in.userLogin_valid()

if __name__ == '__main__':
unittest.main()

我的Login.py类如下:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait 

class LoginPage():

Username            = "test1"
password            = "Test"
emailFieldID        = "email"
passFieldID         = "pass"
loginButtonXpath    = "//input[@value='log in']"
logo_xpath          = "//a[contains(@href, 'logo')])[1]"

def setup(self):
    self.driver = webdriver.Firefox()
    self.driver.get("http://www.testaaa.com")

def __init__(self):
    emailFieldElement  = self.driver.find_element_by_id(self.emailFieldID)
    passFieldElement   = self.driver. find_element_by_id(self.passFieldID)
    loginFieldElement  =  self.driver.find_element_by_xpath(self.loginButtonXpath)

def userLogin_valid(self):
    self.emailFieldElement.clear()
    self.emailFieldElement.send_keys(self.Username)
    self.passFieldElement.clear()
    self.send_keys(self.password)
    self.loginFieldElement.click()

def tearDown(self):
    self.driver.quit()

Tags: inpyimportselflogbydefdriver
1条回答
网友
1楼 · 发布于 2024-09-27 09:22:16

首先,你的设计有缺陷。

脚本失败的原因是,当您创建登录页的对象时,调用了in it但找不到驱动程序,因为它是在setup fn中定义的(从未调用过)

理想情况下,在页面对象模型中,应该在测试文件中初始化浏览器(驱动程序),然后在创建任何页面文件的对象时,应该传递该驱动程序。

你的装置应该是这样的

页面文件:

# setup() fn not needed here
.
.
def __init__(self, driver):
    self.driver = driver
    emailFieldElement  = self.driver.find_element_by_id(self.emailFieldID)
    passFieldElement   = self.driver. find_element_by_id(self.passFieldID)
    loginFieldElement  =  self.driver.find_element_by_xpath(self.loginButtonXpath)
.
# teardown() not needed here, should be in test file
.

测试文件:

.
.
    class GoogleTest(unittest.TestCase):

      def test_valid_login(self):
        self.driver = webdriver.Firefox()   # the first 2 stmts can be in a setupclass
        self.driver.get("http://www.testaaa.com")
        log_in = LoginPage.LoginPage(self.driver)
        log_in.userLogin_valid()
.
.

相关问题 更多 >

    热门问题