如何使python函数使用基于环境变量的字典中的值?

时间:2018-06-20 13:59:34

标签: python appium pytest python-appium

我正在使用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不好,所以我找不到解决方法,请提出建议。

2 个答案:

答案 0 :(得分:1)

直接使用platform变量

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

答案 1 :(得分:1)

您是否可以仅使用platform变量直接为some_locator编制索引?即

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

有效地,some_locator词典执行与if-elif链相同的工作。