关键字驱动
1、简介
在进行自动化测试程序的设计时,为了解决代码冗余、可读性差、复用性低以及维护成本高的问题,常常需要采用更高效的设计模式,目前主要有关键字驱动与POM设计模型两种框架设计模式,其中关键字驱动的设计模式出现较早,主要是利用关键字对selenium接口进行二次封装,测试环境的不同步骤就转换为不同的关键字,提高了代码的可读性、复用性以及可维护性,降低了代码冗余。
2、简单示例
对百度搜索的基本功能进行封装,主要实现输入特定内容,获取搜索结果,打印结果的名称与链接,并打开对应网页,具体代码如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
class KeyWordsTest:
# 打开浏览器
def open_browser(self,browser):
browser = browser.capitalize()
if browser in ["Chrome","Edge","Firefox"]:
##利用反射的方式获取浏览器驱动
self.driver = getattr(webdriver,browser)()
self.driver.maximize_window() #窗口最大化
self.driver.implicitly_wait(5)
else:
raise ValueError("未检测到支持的浏览器类型")
# 加载网页
def load_url(self,url):
self.driver.get(url)
self.driver.implicitly_wait(5)
# 定位元素
def locate_element(self,loc):
# 使用*提取元组中的元素
return self.driver.find_element(*loc)
# 定位元素列表
def locate_elements(self,loc):
# 使用*提取元组中的元素
return self.driver.find_elements(*loc)
#输入信息
def input(self,loc,value):
self.locate_element(loc).send_keys(value)
self.driver.implicitly_wait(1)
#点击操作
def click(self,loc):
self.locate_element(loc).click()
self.driver.implicitly_wait(5)
if __name__ == '__main__':
content = 'selenium'
ktest = KeyWordsTest()
ktest.open_browser("edge")
ktest.load_url("https://www.baidu.com/")
ktest.input((By.ID,"kw"),content)
ktest.click((By.ID,"su"))
results = ktest.locate_elements((By.XPATH,"//a[contains(string(), \'%s\')]"%(content)))
for result in results:
if result.get_attribute("href"):
print(result.get_attribute("text").strip())
# 搜索结果的标题
title = result.get_attribute("text").strip()
# 搜索结果的网址
link = result.get_attribute("href")
print(f"Title: {title}, link is: {link} \n")
result.click()
3、使用Chrome 浏览器查找元素对应的XPath 或 CSS Selector
在 Chrome 浏览器中使用开发者工具可以快速查找页面元素的 XPath 或 CSS Selector,具体步骤如下:
- 打开需要查找元素的网页,在页面上右键单击,选择“检查”或按快捷键 F12,打开 Chrome 开发者工具。
- 在开发者工具的 Elements 标签页中,将鼠标移动到要查找的元素上,该元素会被高亮显示。
- 在选中的元素上右键单击,选择“Copy”,再选择“Copy XPath”或“Copy selector”,即可复制该元素的 XPath或 CSS Selector。
注意事项:
- XPath 与 CSS Selector 都是用于定位页面元素的方法,但两者的语法和定位逻辑略有不同。如果您对 XPath 和 CSS Selector 还不够熟悉,建议先学习一下相关基础知识。
- 在使用 XPath 或 CSS Selector 定位元素时,应尽量避免使用过于复杂的表达式,尽可能地简化表达式,以提高定位精度和效率。
4、快速查找页面元素的xpath或css Selector
在上述实验中可以看出,搜索结果的xpath或者css selector的提取比较繁琐,如何快速有效地找到不同搜索结果通用的xpath或者css selector成为首先要解决的问题。因此可以在浏览器的扩展应用商店中输入xpath或者css selector查找相应的扩展,安装完成即可,此处以xpath selector插件为例,点击插件,此时在浏览器上方会出现如下显示窗口:
接着按着shift按钮,将鼠标左键放置在搜索结果上即可出现xpath或者css selector的字符串,也可以点击红色框中的按钮自行修改,修改完成后被选中的搜索结果会高亮显示。