Как заставить функцию Python использовать значения из словаря на основе переменных среды?

Я автоматизирую тестирование на устройствах iOS и Android с помощью pytest и Appium. Учтите следующее:

some_locator: 
       {
        'iOS': ('MobileBy.ACCESSIBILITY_ID', 'some_id'),
        'Android': ('MobileBy.ID', 'another_id')
        }

def foo():
    bar = driver.find_element(some_locator)
    return bar.text

Я хочу запустить скрипт с 'ios' или же 'android' параметр из командной строки, чтобы сделать функцию find_element используйте соответствующие значения кортежа. Также я знаю, что могу сделать так:

# conftest.py
def pytest_addoption(parser):
    parser.addoption("--platform", default="ios")

@pytest.fixture
def cmdopt(request):
    return request.config.getoption("--platform")

# some_file.py

some_locator: 
       {
        'iOS': ('MobileBy.ACCESSIBILITY_ID', 'some_id'),
        'Android': ('MobileBy.ID', 'another_id')
        }

def foo(platform):
    if platform == 'ios':
        bar = find_element(*some_locator['ios'])
    elif platform == 'android':
        bar = find_element(*some_locator['android'])
    return bar.text

но, честно говоря, мне это не нравится, потому что мне придется добавить эти if блоки в каждом методе. Есть ли удобный способ сделать это? Мой питон плох, поэтому я не могу найти решение, пожалуйста, совет.

2 ответа

Решение

Разве вы не можете просто использовать platform переменная для индексации some_locator напрямую? т.е.

def foo(platform):
    return find_element(*some_locator[platform]).text

Эффективно some_locator словарь выполняет ту же работу, что и if-elif цепь.

Использовать platform переменная напрямую

def foo(platform):
    bar = find_element(*some_locator[platform])
    return bar.text
Другие вопросы по тегам