-这个问题不是解决问题,而是有关如何简化现有代码的问题-我正在使用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)
答案 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))