Есть фикстура браузера:
@pytest.fixture(params=["Mobil"], scope="function") # "Chrome", "Firefox", "Edge"
def driver_init(request):
if request.param == "Mobil":
options_chrome = ChromeOptions()
options_chrome.add_argument(
"user-agent=Mozilla/5.0 (Linux; Android 12) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options_chrome)
driver.set_window_size(250, 700)
if request.param == "Chrome":
print("\nstart chrome browser for test..")
options_chrome = ChromeOptions()
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options_chrome)
driver.set_window_size(1400, 900)
if request.param == "Firefox":
print("\nstart firefox browser for test..")
options_firefox = FirefoxOptions()
driver = webdriver.Firefox(service=Service(GeckoDriverManager().install()),
options=options_firefox)
driver.set_window_size(1400, 900)
if request.param == "Edge":
print("\nstart firefox browser for test..")
options_edge = EdgeOptions()
options_edge.use_chromium = True
driver = webdriver.Edge(
executable_path="",options=options_edge)
driver.set_window_size(1400, 900)
yield driver
print("\nquit browser..")
driver.quit()
Есть логика в которой реализовывается взаимодействие с веб элементами:
from ..pages import loactors_mobil
from ..pages import locators_desctope
class BasePage(SeleniumBase):
def open(self, url: str):
self.driver.get(url)
def get_authorization(self, email: str, password: str):
self._is_present(self.locators.ICON_USER, message="Не удается найти иконку авторизации").click()
input_email = self._is_present(Locators.INPUT_EMAIL, message="Поле ввода эмейла не найдено")
input_password = self._is_present(Locators.INPUT_PASSWORD, message="Поле ввода пароля не найдено")
input_email.send_keys(email)
input_password.send_keys(password)
self._is_present(Locators.LOGIN_BUTTON, message="Кнопка входа не найдена").click()
И есть реализация этой логики в тесте:
@pytest.mark.parametrize('emails', [seller_email, owner_email])
def test_check_presence_page_personal_account(self, driver_init, emails):
driver = driver_init
page_base = BasePage(driver)
page_base.get_authorization(email=emails, password=password)
Как в логику теста передавать разные локаторы(loactors_mobil или locators_desctope) в зависимости от того использовался ли в тесте request.param == “Mobil” или нет. Если используем “Mobil” то передавать loactors_mobil если что то другое то locators_desctope.