Здравствуйте, создаю инструмент, на основе webdriver + pytest.
Смотрел уроки @polusok и читал его статьи - огромное спасибо Вам!)
Так же просмотрел видео про webium и решил его заюзать.
Я пока не могу сложить общую картину у себя в голове.
Значит, что я делаю:
Я разбил проект на три сущности:
/page_objects
/test_case
/common
Вот пример одного из класса PageObject
page_objects.login_page.py
from selenium.webdriver.common.by import By
from main_page import MainPage
from webium import BasePage, Find
class LoginPage(BasePage):
_login_loc = Find(by=By.XPATH, value="//input[@id='login']")
_password_loc = Find(by=By.XPATH, value="//input[@id='password']")
_submit_loc = Find(by=By.XPATH, value="//input[@value = 'ВОЙТИ']")
def __init__(self, driver):
BasePage.__init__(self, driver, url="http://eb-core-test-sso.otr.ru:7777/udu-webcenter")
# Actions
def type_login(self, str_login):
self._login_loc.send_keys(str_login)
def type_password(self, str_password):
self._password_loc.send_keys(str_password)
def submit_login(self):
self._submit_loc.submit()
return MainPage(self._driver)
def login_ass(self, str_login, str_password):
self.type_login(str_login)
self.type_password(str_password)
return self.submit_login()
Затем в test_case я хочу написать тест
test_case.test_login.py
import pytest
from common.base_test import BaseTest
from page_objects.login_page import LoginPage
class TestLogin(BaseTest):
def __init__(self):
self.login_page = LoginPage()
_str_login = "000_Sistema.RS"
_str_password = "Bvthn4kxGc"
def test_login(self, driver):
main_page = self.login_ass(self._str_login, self._str_password)
assert u"Главное меню" in main_page.get_title()
if __name__ == "__main__":
pytest.main()
вот тут я не понимаю уже как мне его сделать грамотно… Мне надо как-то создать объект webdriver и передать его в LoginPage()…
в голове все перепуталось
Я хотел, чтобы инстанс веб-драйвера передавался из тест-кейса в тест-кейс и я увидел такой рецепт от @polusok
common.conftest.py
import pytest
from selenium import webdriver
class DriverManager(object):
def __init__(self):
self._instance = None
def start(self, type="ff"):
self._instance = webdriver.Firefox()
return self._instance
@property
def instatnce(self):
if not self._instance:
self.start()
return self._instance
def stop(self):
self._instance.close()
@pytest.fixture(scope="module")
def driver():
return DriverManager()
common.base_test.py
import pytest
class BaseTest(object):
@pytest.fixture(scope="class")
def manager_driver(self, request, driver):
driver.start()
request.addfinalizer(driver.stop)
Коллеги, прошу помочь…
Может ссылками полезными, статьями, а может советами конкретными.
Я не понимаю как состыковать свои классы page_object с test_case.