[英]AttributeError: 'TestLogin' object has no attribute 'driver'
So, my question is related to AttributeError: 'LoginPage' object has no attribute 'driver' , but answer doesn't solve my issue. 所以,我的问题与AttributeError有关:'LoginPage'对象没有属性'driver' ,但是答案不能解决我的问题。
I'm creating test cases using Python and Appium framework with page object model and I need some code to be executed before every test case, so I use setUp
method for this in base_test.py file. 我正在使用带有页面对象模型的Python和Appium框架创建测试用例,并且在每个测试用例之前都需要执行一些代码,因此我在base_test.py文件中为此使用了
setUp
方法。
base_test.py 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 class extends BaseTest class. TestLogin类扩展了BaseTest类。
test_login.py 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 class needs driver
object because all actions happen in page classes. LoginPage类需要
driver
对象,因为所有操作都在页面类中发生。
If I execute this script I get an error AttributeError: 'TestLogin' object has no attribute 'driver'
. 如果执行此脚本,则会收到错误
AttributeError: 'TestLogin' object has no attribute 'driver'
。
Now, if I change my TestLogin class to: 现在,如果我将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()
I won't receive an error but setUp
method will be executed 2 times, first on setup.setUp()
and then in test_00_login(self)
method. 我不会收到错误,但是
setUp
方法将执行两次,首先在setup.setUp()
上执行,然后在test_00_login(self)
方法中执行。 This is not what I want. 这不是我想要的。
Third way would be to move self.login_page = LoginPage(self.driver)
to the method test_00_login(self)
, but this way I would need to have self.login_page = LoginPage(self.driver)
in every future method I write in TestLogin class. 第三种方法是将
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()
Is there a way of having self.login_page = LoginPage(self.driver)
on top level of TestLogin class, like in __init__(self)
method, but without getting attribute error? 是否有一种方法可以像在
__init__(self)
方法中那样,在TestLogin类的顶级上具有self.login_page = LoginPage(self.driver)
,但不会出现属性错误? I need a better way of handling it. 我需要一种更好的处理方式。
Thank you. 谢谢。
that because you didn't defined (driver): 那是因为您没有定义(驱动程序):
class TestLogin(BaseTest):
driver = 'driver'
def __init__(self):
self.login_page = LoginPage(self.driver)
then: 然后:
TestLogin(Something).__init__()
you just forgot to define driver you must define it in the class (TestLogin) not in others class 您只是忘了定义驱动程序,必须在类(TestLogin)中定义它,而不是在其他类中
i found other answer for you , you must define self.driver before everything: 我为您找到了其他答案,您必须在一切之前定义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()
then what ever you want , don't forget to define other syntaxs 然后,无论您想要什么,别忘了定义其他语法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.