自动化测试常见函数(上篇)
1.查找元素
find_element(方式,"元素") //查找一个元素
find_elements(方式,"元素") //查找多个元素,返回值List
driver.get("https://www.baidu.com")
ret=driver.find_elements(By.CSS_SELECTOR,"#hotsearch-content-wrapper")
for i in ret:print(i.text)
运行结果:
查找元素的方式:选择器(cssSelector)、xpath、ID、class_name
常用的是cssSelector(选中页面中指定的标签元素 )、xpath
2.操作测试对象
常见的操作有点击、提交、输入、清楚、获取文本
2.1 点击/提交对象---click()
页面上任意位置/元素都可以实现点击操作
2.2 模拟按键输入--send_keys(" ")
模拟键盘输入,因此键盘上可以输入的内容都可以填进去
2.3 清除文本--clear()
连续的send_keys会将多次输入的内容拼接到一起,若想重新输入,需要使用清除方法。
2.4 获取文本信息--text
text=driver.find_elements(By.CSS_SELECTOR,"#hotsearch-content-wrapper").text
注意:属性值!=文本信息
现在想获取按钮百度一下的文本
driver.get("https://www.baidu.com")
ret=driver.find_element(By.CSS_SELECTOR,"#su").text
print(ret)
运行结果:结果为空
应该是:获取属性值()
ret=driver.find_element(By.CSS_SELECTOR,"#su").get_attribute("value")
print(ret)
执行结果:
2.5获取当前页面标题和URL
获取标题 ---title
获取当前页面url ----current_url
driver.get("https://www.baidu.com")
print("before:"+driver.title)
print("before:"+driver.current_url)
driver.find_element(By.CSS_SELECTOR,"#su").click
time.sleep(2)
print("after:"+driver.title)
print("after:"+driver.current_url)
执行结果:页面跳转前后打印出来的标题和url没有变化
适用场景:页面元素可点击跳转的情况下,可用来检测跳转的结果是否正确
#获取当前页面的句柄--第一个标签页
curHandle=driver.current_window_handle
#获取所有句柄
allHandle=driver.window_handles
for handle in allHandle:if handle!=curHandle:#切换句柄driver.switch_to_window(handle)
3.窗口
打开一个新的页面在之后获取到的title和url仍然是前一个页面的?
我们手工测试的时候,我们可以通过眼睛来判断当前的窗口是什么,但对于程序来说它不知道当前最新的窗口应该是哪个。对于程序来说他怎么来识别每一个窗口呢?每个浏览器都有一个唯一的属性句柄来表示,我们就可以通过句柄来切换。
那么是否存在打开了多个标签页,切换到某一个标签页的场景?
这种场景在测试中不常见
通常情况下一般会打开两个标签页,实现标签页的切换测试,更多时候,直接输入对应页面的连接在当前标签页下进行测试。
3.2 窗口设置大小
1)窗口大小的设置
driver.maximize_window() //窗口最大化
driver.minimize_window()//窗口最小化
driver.fullscreen_window()//窗口全屏
driver.set_window_size(1024,768)//手动设置窗口大小
仅作了解即可,在自动化脚本执行过程中通常测试人员不会关注页面的变化
3.3 屏幕截图--- save_screenshot
我们的自动化脚本一般部署到机器上自动的去运行,如果出现了报错,我们是不知道的,可以通过抓怕来记录当时的错误场景。
driver.save_screenshot('../images/image.png')
由于图片给定的名称是固定的,当我们多次运行自动化脚本时,历史的图片将会被覆盖
如何将历史的图片文件保存下来:每次生成的图片文件名称都不一样
//autotest-2024-05-08-104723.png
filename="autotest-"+datatime.datatime.now().strftime("%Y-%m-%d-%H%M%S")+".png"
driver.save_screenshot("./images/"+filename)
3.4 关闭窗口
driver.close()
注意:窗口关闭后driver要重新定义,关闭窗口!=关闭浏览器,因此在执行driver.close()之后仍然还需要调用driver.quit()
driver.close() //退出一个窗口
driver.quit() //退出浏览器,当执行这条语句后,所有的标签页都会被关闭
4.弹窗
弹窗是在页面是找不到任何元素的,这种情况怎么处理?使用selenium提供的Alert接口
1)页面上定位找不到弹窗元素
2)出现了弹窗,页面其他的元素也无法定位
因此出现了弹窗,必须先处理弹窗之后才能定位到页面的元素
首先切换到弹窗;再关闭弹窗(确认/取消)
alert=driver.switchTo.alert
alert.accpet() //确认
alert.dismiss() //取消 任选一个都可以关闭
alert.send_keys("hello")