
web自动化测试的操作核心是能够找到页面对应的元素,然后才能对元素进行具体的操作。
常见的元素定位方式非常多,如id,classname,tagname,xpath,cssSelector等等:
其中最为常用的主要是cssSelector和xpath。

选择器的功能:选中页面中指定的标签元素。
选择器的种类分为基础选择器和复合选择器,常见的元素定位方式可以通过id选择器和子类选择器来进行定位。
id选择器——


定位百度首页的“百度热搜”元素,可以使用通过id选择器和子类选择器进行定位:
#s-hotsearch-wrapper > div “搜索输入框元素”:#kw “百度一下按钮”:#su

XML路径语言,不仅可以在XML文件中查找信息,还可以在HTML中选取节点。
xpath使用路径表达式来选择xml文档中的节点。
xpath语法中——
//*
//[指定节点]
//ul:获取HTML页面所有的ul节点 //input:获取HTML页面所有的input节点
/
//span/input

..
//input/.获取input节点的父节点
[@...]
//*[@id='kw']匹配HTML页面中id属性为kw的节点
注意:xpath的索引是从1开始的。
百度首页通过://div/ul/li[3]定位到第三个百度热搜标签
更便捷的生成selector/xpath的方式:右键选择复制"Copyselector/xpath"
案例:如果想要匹配到百度首页指定的新闻文本或者节点集:直接使用#hotsearch-content- wrapper>li能够满足吗?
问题:既然可以手动复制selector/xpath的方式,为什么还有了解语法?
手动复制的selector/xpath表达式并不一定满足上面的唯一性的要求,有时候也需要手动的进行修改表达式。
案例:百度首页(需要登陆百度账号)右侧的热搜,复制li标签下的a标签,复制好的selector为:#title-content,xpath为://*[aid="title-content"],同学们可以手动操作一下,手动复制的表达式是否唯一呢?
鼠标直接复制可以解决问题,但是难免后面会需要手动的修改/编写选择器元素、xpath元素,因此我们对选择器和xpath要有定的了解。
获取到了页面的元素之后,接下来就是要对元素进行操作了。常见的操作有点击、提交、输入、清除、获取文本。
click()
#找到百度⼀下按钮并点击
driver.find_element(By.CSS_SELECTOR, "#su").click()
send_keys("")
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("迪丽热巴")
输入文本后又想换一个新的关键词,这里就需要用到clear()。
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("迪丽热巴")
time.sleep(1)
driver.find_element(By.CSS_SELECTOR,"#kw").clear()
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("古⼒娜扎")
如果判断获取到的元素对应的文本是否符合预期呢?获取元素对应的文本并打印一下。
获取文本信息:text
text = driver.find_element(By.XPATH,'//*[@id="hotsearch-contentwrapper"]/li[1]/a/span[2]').text
print(f"text:{text}")问题:是否可以通过text获取到“百度一下按钮”上的文字“百度一下”呢?uu们可以尝试一下!
注意:文本和属性值不要混淆了。
获取属性值需要使用方法:get_attribute("属性名称")。

title
title = driver.title
current_url
url = driver.current_url
打开一个新的页面之后获取到的title和URL仍然还是前一个页面的?
当我们手工测试的时候,我们可以通过眼睛来判断当前的窗口是什么,但对于程序来说它是不知道当前最新的窗口应该是哪一个。对于程序来说它怎么来识别每一个窗口呢?每个浏览器窗口都有一个唯一的属性句柄(handle)来表示,我们就可以通过句柄来切换。

driver.current_window_handle
driver.window_handles

curWindow = driver.current_window_handle
allWindows = driver.window_handles
for window in allWindows:
if window != curWindow:
driver.switch_to.window(window)注意:执行了driver.close()之前需要切换到未被关闭的窗口。

#窗⼝最⼤化
driver.maximize_window()
#窗⼝最⼩化
driver.minimize_window()
#窗⼝全屏
driver.fullscreen_window()
#⼿动设置窗⼝⼤⼩
driver.set_window_size(1024,768)仅做了解即可,在自动化脚本执行过程中通常测试人员不关注页面的变化。
我们的自动化脚本一般部署在机器上自动的去运行,如果出现了报错,我们是不知道的,可以通过抓拍(screenshot)来记录当时的错误场景。
driver.save_screenshot('../images/image.png')
代码演示如下——
#简单版本
driver.save_screenshot('../images/image.png')
#⾼阶版本
filename = "autotest-"+datetime.datetime.now().strftime('%Y-%m-%d-
%H%M%S')+'.png'
driver.save_screenshot('../images/'+filename)
driver.close()
注意:窗⼝关闭后driver要重新定义
弹窗是在页面是找不到任何元素的,这种情况怎么处理?使用selenium提供的Alert接口。

alert = driver.switchTo.alert
//确认
alert.accept()
//取消
alert.dismiss()
alert = driver.switchTo.alert
alert.send_keys("hello")
alert.accept()
alert.dismiss()
本文的内容到这里就全部结束了,感谢您的阅读!
往期回顾:
【测试分类 (下)】测试分类看这篇就够了:彻底告别概念混淆,轻松搞定工作面试
结语:本期我们学习了测试开发/测试内容中的自动化测试常用函数篇,希望对学习测试开发/测试相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!
🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა