Итак, мой вопрос связан с AttributeError: у объекта 'LoginPage' нет атрибута 'driver' , но ответ не решает мою проблему.
Я создаю тестовые случаииспользуя Python и платформу Appium с объектной моделью страницы, и мне нужно выполнить код перед каждым тестовым случаем, поэтому я использую метод 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 расширяет класс 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)
, но в этом случае мне потребуется self.login_page = LoginPage(self.driver)
в каждом будущем методе, который я напишу в классе TestLogin.
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)
, но без получения ошибки атрибута?Мне нужен лучший способ справиться с этим.
Спасибо.