Здравствуйте.
Необходимо использовать аргумент из консоли в локаторах pytest.
Проект состоит из 4х файлов. Запуск в консоли выглядит так
pytest test_yandex.py --basekeys="яндекс" --domain="yandex.ru"
Первый conftest.py:
принимает из консоли два аргумента, один --basekeys который используется в файле test_yandex.py(тут все работает и ок), второй --domain должен использоваться в локаторах(файл YandexPages.py) - как раз с ним и заминка
import pytest
from selenium import webdriver
@pytest.fixture(scope="class")
def setup():
print("Инициализация драйвера FireFox")
driver = webdriver.Firefox()
driver.maximize_window()
yield driver
driver.quit()
def pytest_addoption(parser):
parser.addoption("--basekeys", action="store", default="optional")
parser.addoption("--domain", action="store", default="optional")
Второй BaseApp.py:
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pytest
class BasePage:
def __init__(self, driver):
self.driver = driver
self.base_url = "https://ya.ru/"
def find_element(self, locator,time=10):
return WebDriverWait(self.driver,time).until(EC.presence_of_element_located(locator),
message=f"Can't find element by locator {locator}")
def find_elements(self, locator,time=10):
return WebDriverWait(self.driver,time).until(EC.presence_of_all_elements_located(locator),
message=f"Can't find elements by locator {locator}")
def go_to_site(self):
return self.driver.get(self.base_url)
Третий YandexPages:
from BaseApp import BasePage
from selenium.webdriver.common.by import By
import time
class YandexSeacrhLocators:
# Поле ввода запроса
LOCATOR_YANDEX_SEARCH_FIELD = (By.ID, "text")
# Кнопка найти
LOCATOR_YANDEX_SEARCH_BUTTON = (By.CLASS_NAME, "search2__button")
# Домен под заголовком элемента выдачи
LOCATOR_YANDEX_SEARCH_DOMAIN = (By.XPATH,
"//b[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'), '" + domains + "')]")
# Кнопка дальше
LOCATOR_YANDEX_NEXT_PAGE_BUTTON = (By.CSS_SELECTOR, ".pager__item_kind_next")
class SearchHelper(BasePage):
# Выполняется поиск строки ввода, клик на строку и ввод ключа
def enter_word(self, word):
search_field = self.find_element(YandexSeacrhLocators.LOCATOR_YANDEX_SEARCH_FIELD)
search_field.click()
search_field.send_keys(word)
return search_field
# Выполняется нажатие кнопки найти
def click_on_the_search_button(self):
print("Нажатие кнопки поиск")
return self.find_element(YandexSeacrhLocators.LOCATOR_YANDEX_SEARCH_BUTTON, time=2).click()
# Выполняется переход на следующую страницу результатов поиска с задержкой 2 сек после прогрузки кнопки дальше
def click_on_the_next_page_button(self):
print("Переход на следующую страницу")
return self.find_element(YandexSeacrhLocators.LOCATOR_YANDEX_NEXT_PAGE_BUTTON, time=2).click()
# Выполняется поиск домена на странице поиска с задержкой ожидания прогрузки элементов 2 сек
def find_domain(self):
print("Поиск домена")
return self.find_element(YandexSeacrhLocators.LOCATOR_YANDEX_SEARCH_DOMAIN, time=2).is_displayed()
# Выполняется клик по домену с задержкой после прогрузки элементов страницы 2 сек и после клика 3 сек
def click_domain(self):
self.find_element(YandexSeacrhLocators.LOCATOR_YANDEX_SEARCH_DOMAIN, time=2).click()
print("Клик по домену " + domains + "")
time.sleep(3)
Четвертый test_yandex.py:
from YandexPages import SearchHelper
def test_yandex_search(setup, pytestconfig):
# Ключ берется из параметра командной строки basekeys
key = pytestconfig.getoption('basekeys')
yandex_main_page = SearchHelper(setup)
# Выполняется открытие сайта Яндекс
yandex_main_page.go_to_site()
# Выполняется ввод ключа в строку поиска
yandex_main_page.enter_word(key)
# Выполняется клик по кнопку Найти
yandex_main_page.click_on_the_search_button()
# Условие Если для поиска нужного домена на странице результат поиска и клик по нему
while True:
try:
# Ищем домен на странице
yandex_main_page.find_domain()
except Exception:
# Домен не найден, выполняется переход на следующую страницу результатов поиска
yandex_main_page.click_on_the_next_page_button()
else:
# Если домен найден то выполнить клик по ссылке
yandex_main_page.click_domain()
# Прерывание цикла
break
Пытался реализовать использование в локаторах как и в файле test_yandex, но просто не воспринимается аргумент.
С python пыхчу третий день, прошу понять и простить)