Импорт разных локаторов в одну функцию в зависимости от того какой драйвер используется.

Есть фикстура браузера:

@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.

а в чем затруднение ? в фикстуре я так понимаю заполняются глобальные переменные - так ? или свойства некого класса ? ну добавьте еще одну глобальную переменную или еще одно свойство тому классу и сохраните локатор там. или есть какой то питон специфический запрет на это делать ? не знаток питона (мне проще кажется ява) поэтому могу допустить что есть подводнык камни

не надо помещать get_authorization в BasePage
поместите этот метод в отдельный класс и добавьте ему в параметры Locators
для самих локаторов создайте еще одну фикстуру с похожей логикой как у driver_init только возвращающую локаторы
можно передавать их как Map наверное, но тут я не знаток питона тоже

Насколько знаю, @pytest.mark.parametrize имеет область выше инициализирующей фикстуры. Т.е всегда запускается раньше и передать в нее значения из фикстуры, инициализирующей драйвер, не получится.

В Вашеим случае можно использорвать хук pytest_generate_tests, описанный с примером по ссылке ниже:

https://docs.pytest.org/en/6.2.x/parametrize.html#basic-pytest-generate-tests-example