所以,我的问题与AttributeError: 'LoginPage' object has no attribute 'driver'有关,但答案并没有解决我的问题。
我使用带有页面对象模型的Python和Appium框架创建测试用例,我需要在每个测试用例之前执行一些代码,因此我在base_test.py文件中使用setUp
方法。
base_test.py
class BaseTest(object):
def setUp(self):
self.driver = webdriver.Remote(server_url,device_config)
self.os = str(self.driver.caps['platformName']).lower()
TestLogin类扩展了BaseTest类。
test_login.py
class TestLogin(BaseTest):
def __init__(self):
self.login_page = LoginPage(self.driver)
def test_00_login(self):
self.login_page.openLoginPage()
LoginPage类需要driver
个对象,因为所有操作都发生在页面类中。
如果我执行此脚本,则会收到错误AttributeError: 'TestLogin' object has no attribute 'driver'
。
现在,如果我将TestLogin类更改为:
class TestLogin(BaseTest):
def __init__(self):
setup = BaseTest()
setup.setUp()
self.login_page = LoginPage(setup.driver)
def test_00_login(self):
self.login_page.openLoginPage()
我没有收到错误,但setUp
方法将执行2次,先是setup.setUp()
,然后是test_00_login(self)
方法。这不是我想要的。
第三种方法是将self.login_page = LoginPage(self.driver)
移动到方法test_00_login(self)
,但是这样我在TestLogin类中编写的每个方法中都需要self.login_page = LoginPage(self.driver)
。
class TestLogin(BaseTest):
def test_00_login(self):
self.login_page = LoginPage(self.driver)
self.login_page.openLoginPage()
有没有办法让self.login_page = LoginPage(self.driver)
在TestLogin类的顶层,如__init__(self)
方法,但没有得到属性错误?我需要一种更好的方法来处理它。
谢谢。
答案 0 :(得分:0)
因为你没有定义(驱动程序):
class TestLogin(BaseTest):
driver = 'driver'
def __init__(self):
self.login_page = LoginPage(self.driver)
然后:
TestLogin(Something).__init__()
你只是忘了定义驱动程序 你必须在类(TestLogin)中定义它而不是在其他类
中定义它答案 1 :(得分:0)
我为你找到了其他答案,你必须在所有事情之前定义self.driver:
from webdriver import Remote
import webdriver
self = webdriver
driver = Remote(server_url,device_config)
class BaseTest(object):
def setUp(self):
self.os = str(self.driver.caps['platformName']).lower()
class TestLogin(BaseTest):
def __init__(self):
self.login_page = LoginPage(self.driver)
def test_00_login(self):
self.login_page.openLoginPage()
class TestLogin(BaseTest):
def test_00_login(self):
self.login_page = LoginPage(self.driver)
self.login_page.openLoginPage()
然后你想要什么,不要忘记定义其他语法