gpt4 book ai didi

python - 如果在 python 中,需要减少多个 else

转载 作者:太空宇宙 更新时间:2023-11-03 12:20:06 25 4
gpt4 key购买 nike

我正在尝试使用 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)

这样我们就可以指定定位器类型并给出实际的定位器('element'),以便 selenium 可以尝试在网页上找到 web 元素。有没有什么方法可以减少 elif 语句或任何其他更好的方法来编写这部分内容?

Too many if statements

我尝试了上面链接中的方法,但它没有帮助我。请帮我解决这个问题。

编辑我试过像这样创建一个字典

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 依赖于元素:

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)

关于python - 如果在 python 中,需要减少多个 else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55228751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com