如何使 python 函数根据环境变量使用字典中的值?
How to make python function use values from dictionary based on environment variables?
我正在使用 pytest 和 Appium 在 iOS & Android 设备上进行自动化测试。
考虑以下因素:
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
块。
有什么方便的方法吗?我的python不好所以想不出解决办法,求指教
直接使用platform
变量
def foo(platform):
bar = find_element(*some_locator[platform])
return bar.text
不能直接用platform
变量索引some_locator
吗?即
def foo(platform):
return find_element(*some_locator[platform]).text
实际上,some_locator
字典与 if-elif
链执行相同的工作。
我正在使用 pytest 和 Appium 在 iOS & Android 设备上进行自动化测试。 考虑以下因素:
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
块。
有什么方便的方法吗?我的python不好所以想不出解决办法,求指教
直接使用platform
变量
def foo(platform):
bar = find_element(*some_locator[platform])
return bar.text
不能直接用platform
变量索引some_locator
吗?即
def foo(platform):
return find_element(*some_locator[platform]).text
实际上,some_locator
字典与 if-elif
链执行相同的工作。