python - 如果在python中需要减少多个else
问题描述
我正在尝试使用 python 使用 selenium-webdriver 对基本 html 网站进行自动化回归测试。我编写了一个函数,该函数将从 excel 中获取输入,以确定网页上元素的定位器类型,如下所示:
if locator_type == "ID":
web_element = self.__driver.find_element_by_id(element)
elif locator_type == "NAME":
web_element = self.__driver.find_element_by_name(element)
elif locator_type == "XPATH":
web_element = self.__driver.find_element_by_xpath(element)
elif locator_type == "TAG_NAME":
web_element = self.__driver.find_element_by_tag_name(element)
elif locator_type == "LINK_TEXT":
web_element = self.__driver.find_element_by_link_text(element)
elif locator_type == "CLASS_NAME":
web_element = self.__driver.find_element_by_class_name(element)
elif locator_type == "PARTIAL_LINK_TEXT":
web_element = self.__driver.find_element_by_partial_link_text(element)
这样我们就可以指定定位器类型并给出实际的 locator('element') 以便 selenium 可以尝试在网页上查找 web 元素。有什么方法可以减少 elif 语句或任何其他更好的方法来编写这部分?
我尝试了上面链接中的方法,但对我没有帮助。请帮我解决这个问题。
编辑 我尝试创建一个这样的字典
locator_dict = {
'ID' : driver.find_element_by_id(element),
'NAME' : driver.find_element_by_name(element)}
然后我收到一个错误,说元素未定义
解决方案
各个子句的主体之间的唯一区别是您实际调用的方法。您可以将其分解为dict
.
d = {
"ID": self.__driver.find_element_by_id,
"NAME": self.__driver.find_element_by_name,
# etc
}
if locator_type in d:
web_element = d[locator_type](element)
else:
# do something if you haven't defined a method for locator_type
您也可以使用methodcaller
,尽管第一次尝试d
依赖于element
:
from operator import methodcaller
methods = [
("ID", "find_element_by_id"),
("NAME", "find_element_by_name"),
# etc
]
d = { tag: methodcaller(method, element) for tag, method in methods }
if locator_type in d:
web_element = d[locator_type](self.__driver)
要完全独立于驱动程序或元素,请使用
d = dict(methods)
if locator_type in d:
web_element = methodcaller(d[locator_type], element)(self.__driver)
推荐阅读
- sql - SQL - 查找具有给定特征的所有列中的所有值示例
- arrays - Powershell - 使用数组将哈希表写入文件
- c# - 在 C# 或 VBA VSTO 加载项中运行 Word 宏
- python - 当我在 VS 代码中运行我的 python 代码时,它会在终端选项卡中显示输出,而不是在输出选项卡中
- microsoft-graph-api - 图形 API 团队获取 chatMessageHostedContent 无法获取现有图像
- angular - 如何在 Angular 中将 flatMap 与 Subject 一起使用
- c# - Ubuntu终端上的.NET Core参数十进制错误
- c# - 如何在 UI 文本中为健康和分数制作计数器
- javascript - 如何将复杂json对象中的图像从js上传到asp?
- python - 使用循环 Python 将单个数据帧存储在列表中