at_sergei
(at_sergei)
18.Июнь.2019 20:20:49
#1
Здравствуйте,
Пытаюсь автоматизировать мобильное приложение.
Стек: appium+pytest
Инициализирую вебдрайвер 1 раз на сессию:
conftest.py:
@pytest.fixture(scope="session")
def init_driver(request):
logging.info("Creating a webdriver instance")
driver = webdriver.Remote(appium_host, desired_caps)
session = request.node
for item in session.items:
cls = item.getparent(pytest.Class)
setattr(cls.obj, "driver", driver)
logging.info("Webdriver instance was created")
def fin():
logging.info("Closing webdriver instance")
driver.quit()
yield
request.addfinalizer(fin)
test_accoun_page.py
class TestAccountPageFlow(BaseCase, MobileAccountPage):
def test_account_settings(self):
print("11111111")
common.py
@pytest.mark.usefixtures("init_driver")
class BaseCase:
pass
Есть тесты которые используют приложение, но пользователь должен быть уже залогинен, своего рода прекондишен перед тестами.
Но, я не понимаю как сделать следующию последоватьльность:
инит драйвера
логин
тесты N
логаут
закрытие драйвера
Своего рода декораторы, но тесты могут быть в разных модулях/классах или вызываться по mark.
Просмтрел кучу материала от @polusok , но так и не нашел ответа.
Коллеги прошу Вашей помощи.
@pytest.fixture(scope='session')
def driver():
init_driver()
yield
quit_driver()
@pytest.fixture(scope='session')
def login(driver)
log_in()
yield
log_out()
@pytest.fixture(scope='session', autouse=True)
def setup_env(login):
pass
at_sergei
(at_sergei)
19.Июнь.2019 19:38:57
#3
Спасибо за помощь,
Сделал так:
conftest.py
def init_driver():
logging.info("Creating a webdriver instance")
return webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
@pytest.fixture(scope='session', autouse=True)
def driver(request):
driver = init_driver()
login_(driver)
session = request.node
for item in session.items:
cls = item.getparent(pytest.Class)
setattr(cls.obj, "driver", driver)
def fin():
logout_(driver)
logging.info("Closing webdriver instance")
driver.quit()
yield
request.addfinalizer(fin)
common.py
def _login(driver):
logging.info("Login")
def _logout(driver):
logging.info("Logout")
page_obj.py
@mark.usefixtures('driver')
class BasePage():
pass
test1.py
class TestLogin(MobileHomePage):
@pytest.mark.webtest
def test_lesson_1(self):
logging.info("test 1")
mobile_home_page.py
class MobileHomePage(BasePage):
pass
Но, тесты иногда падают с ошибкой:
selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Could not proxy command to remote server. Original error: Error: socket hang up
Может кто-нибудь знает в чем причина и как побороть?
madvlaydin
(Vladislav Abramov)
20.Июнь.2019 04:09:16
#4
порты заняты походу
тут есть тема на форуме, где писали как увеличить пул портов, чтоб подобных ошибок не было