我已经阅读了一些有关Python Selenium Webdriver Page Object模型的教程,因为我必须使用Selenium和Python自动化gui测试。
首先,我正在尝试编写Login Page类和LoginMainTest类。我运行代码时收到以下错误。
AttributeError:LoginPage实例没有属性'driver'
我想我必须指定我实例化LoginPage的selenium驱动程序 例如在这一行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()
答案 0 :(得分:1)
首先,您的设计存在缺陷。
您的脚本失败的原因是因为当您创建登录页面的对象时, init 会被调用,但它无法找到驱动程序,因为它是在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()
.
.
答案 1 :(得分:0)
由于Chrome浏览器版本和Chrome Webdriver版本之间不匹配,我每次都遇到这个问题。
因此,在从https://chromedriver.chromium.org/下载相应的ChromeDriver之前,请在您的Chrome浏览器中查看帮助>关于Google Chrome。
祝你好运!