所以,我的问题与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)
方法中一样,而不会出现属性错误?我需要一个更好的处理方式。
谢谢。
发布于 2018-06-11 00:22:21
我为你找到了另一个答案,你必须在所有事情之前定义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()
然后,无论您想要什么,不要忘记定义其他语法
https://stackoverflow.com/questions/50745330
复制相似问题