Как заставить функцию 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