替换if / elif-用带有硒的开关箱python(代码简化解决方案)

时间:2019-06-16 22:36:34

标签: python selenium

-这个问题不是解决问题,而是有关如何简化现有代码的问题-我正在使用Python自动化框架Work开发Selenium。在我的Action()类中,我有几个函数。其中的2个,例如Click()和Send_keys()有很多if / elif语句。有人可以帮助我如何将其更改为切换用例逻辑吗? 谢谢

try:
    if locatorStrategy == 'id':  # return by ID
        ele =  self.driver.find_element_by_id(locator).click()

    elif locatorStrategy == 'xp':  # return by XPATH
        ele =  self.driver.find_element_by_xpath(locator).click()

    elif locatorStrategy == 'li':  # return by link text
        ele =  self.driver.find_element_by_link_text(locator).click()

    elif locatorStrategy == 'na':  # return by name
        ele =  self.driver.find_element_by_name(locator).click()

    elif locatorStrategy == 'cs':  # return by css
        ele =  self.driver.find_element_by_css_selector(locator).click()

    elif locatorStrategy == 'pa':  # return by partiL LINK TEXT
        ele =  self.driver.find_element_by_partial_link_text(locator).click()

    elif locatorStrategy == 'ta':  # return by tag name
        ele =  self.driver.find_element_by_tag_name(locator).click()

    elif locatorStrategy == 'cl':  # return by class name
        ele =  self.driver.find_element_by_class_name(locator).click()
except Exception as e:
    logging.info(e)

3 个答案:

答案 0 :(得分:0)

Python中没有开关盒。即使有,看起来还是差不多。您可以做的一件事是创建一个字典,然后只需调用dictionary [locatorStrategy]即可获取功能

答案 1 :(得分:0)

使用字典。

ele = {'id': self.driver.find_element_by_id,
       'xp'; self.driver.find_element_by_xpath,
       'li': self.driver.find_element_by_link_text,
       'na': self.driver.find_element_by_name,
       'cs': self.driver.find_element_by_css_selector,
       'pa': self.driver.find_element_by_partial_link_text,
       'ta': self.driver.find_element_by_tag_name,
       'cl': self.driver.find_element_by_class_name,
 }[locatorStrategy](locator).click()

或者不使用两个字母的代码,而使用方法的实际名称(例如locatorStrategy = "find_element_by_id")并使用:

ele = getattr(self.driver, locatorStrategy)(locator).click()

try/except与您的相同。

答案 2 :(得分:0)

尽管python中没有switch-case功能,但是您可以使用一个类来创建这样的类     类PythonSwitch:

    def switch(self, timezone):
        default = "unknown timezone"
        return getattr(self, 'case_' + str(timezone), lambda: default)()

    def case_UTC(self):
        return 0

    def case_BST(self):
        return 1

    def case_PDT(self):
        return -7

s = PythonSwitch()

print(s.switch(BST))
print(s.switch(UTC))