Python如何避免许多if语句

时间:2016-06-13 14:19:38

标签: python if-statement

我会尝试简化我的问题。我正在使用py.test和appium编写测试程序。现在:

在应用程序中,我有4种媒体格式:视频,音频,图像和文档。 我有一个带上一个,下一个,播放,停止按钮的控制界面。 每种媒体格式都有一个唯一的ID,如

video_playbutton,audio_playbutton,document_playbutton,image_playbutton,video_stopbutton audio_stopbutton ...等等。

但我必须做的操作对所有人来说都是一样的,例如按下播放按钮。

当我明确地给出它们时,我可以解决每个的播放按钮

find_element_by_id("video_playbutton")

当我想按下其他播放按钮时,我每次都会重复上述行。像这样:

find_element_by_id("video_playbutton")
find_element_by_id("audio_playbutton")
find_element_by_id("image_playbutton")
find_element_by_id("document_playbutton")

因为我从另一个脚本调用这个函数,所以我必须首先区分我得到的字符串,例如:

def play(mediatype):
    if mediatype == "video"
          el = find_element_by_id("video_playbutton")
          el.click()
    if mediatype == "audio"
          el = find_element_by_id("audio_playbutton")
          el.click()
    if .....

解决这种情况的最佳方法是什么?我想避免数百个if语句,因为还有stop,next,previous等按钮。

我宁愿搜索类似的内容

def play(mediatype)
    find_element_by_id(mediatype.playbutton)

1 个答案:

答案 0 :(得分:1)

您可以将选择器和操作分为两个词典,其中可以更好地扩展。否则,映射最终会变得很大。这是一个例子。

dictMedia = {'video':['video_playbutton', 'video_stopbutton','video_nextbutton'], 'audio':['audio_playbutton', 'audio_stopbutton', 'audio_nextbutton']}
dictOperations = {'play':0, 'stop':1, 'next':2}
def get_selector(mediatype, operation):
    return dictMedia[mediatype][dictOperations[operation]]

print get_selector('video', 'play')

PS:上述操作不会检查未找到密钥错误。 但是,我仍然觉得,如果媒体特定的操作增长,那么页面对象模型会更好。