dgu*_*y73 3 python python-3.x selenium-webdriver
我正在尝试使用selenium-webdriver和python自动进行基本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)
Run Code Online (Sandbox Code Playgroud)
这样我们就可以指定定位器类型并给出实际的定位器('element'),以便硒可以尝试在网页上找到网络元素。有什么方法可以减少elif语句,或者有其他更好的方法来编写此部分?
我在上面的链接中尝试了该方法,但并没有帮助我。请帮助我解决这个问题。
编辑 我试图创建一个像这样的字典
locator_dict = {
'ID' : driver.find_element_by_id(element),
'NAME' : driver.find_element_by_name(element)}
Run Code Online (Sandbox Code Playgroud)
然后我收到一条错误消息,指出未定义元素
che*_*ner 10
各个子句的主体之间的唯一区别是您实际调用的方法。您可以将其分解为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
Run Code Online (Sandbox Code Playgroud)
您也可以使用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)
Run Code Online (Sandbox Code Playgroud)
要完全独立于驱动程序或元素,请使用
d = dict(methods)
if locator_type in d:
web_element = methodcaller(d[locator_type], element)(self.__driver)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |