测试第三课-------自动化测试相关
作者前言
🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
🎂 作者介绍: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者id:老秦包你会, 🎂
简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
喜欢学习C语言、C++和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂
🎂个人主页::小小页面🎂
🎂gitee页面:秦大大🎂
🎂🎂🎂🎂🎂🎂🎂🎂
🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂
自动化相关
- **作者前言**
- 元素定位方法
- CSS selector
- 通过xpath
- 对测试对象进行操作
- 点击
- 模拟输入
- 清除⽂本内容
- 获取文本
- 获取当前⻚⾯标题
- 获取当前页面的url
- get_attribute("属性名称")
- 窗口
- 窗口的大小
- 屏幕截图
- 关闭当前的窗口
- 弹窗
- 等待
- 强制等待
- 隐式等待
- 显示等待
- 浏览器导航
- 文件上传
元素定位方法
CSS selector
在上一篇的文章中,写了一个简单自动化脚本,这个使用到的元素定位就是这个,需要我们打开浏览器,按下F12进入开发者工具,
如图:
然后选择其中的一个标签,复制对应的css selector
通过xpath
这里的话也是跟上面的获取方式是一样的,复制对应的xpath来
获取HTML⻚⾯所有的节点
//*
获取HTML⻚⾯指定的节点
//[指定节点]
//ul :获取HTML⻚⾯所有的ul节点
//input:获取HTML⻚⾯所有的input节点
获取⼀个节点中的直接⼦节点
/
//span/input
获取⼀个节点的⽗节点
…
//input/… 获取input节点的⽗节点
实现节点属性的匹配
[@…]
//*[@id=‘kw’] 匹配HTML⻚⾯中id属性为kw的节点
对测试对象进行操作
点击
click()
模拟输入
send_keys("")
清除⽂本内容
clear()
获取文本
text
获取当前⻚⾯标题
title
获取当前页面的url
current_url
get_attribute(“属性名称”)
获取标签的属性值
窗口
在测试的过程中,不仅仅是单独在一个页面进行测试,也有可能页面跳转进行测试,当页面跳转的时候,就需要我们切换窗口了。
方法如下:
获取当前的窗口句柄
driver.current_window_handle
获取全部窗口的句柄
driver.window_handles
切换窗口句柄
driver.switch_to.window(某个句柄)
窗口的大小
# 设置窗口的大小
chromeDriver.maximize_window()# 最大化
time.sleep(3)
chromeDriver.minimize_window()# 最小化
time.sleep(3)
chromeDriver.set_window_size(200,200)# 设置窗口的大小
time.sleep(3)
chromeDriver.fullscreen_window()# 全屏相当于快捷键f11
屏幕截图
driver.save_screenshot('../images/image.png')# 参数是保存图片的名称
虽然截图好用,但是保存的路径却是一个疼伤,文件名必须不一样,这就让我们想到是否可以使用时间来进行命名,时间每一秒都是不一样的,我们可以借助本地时间来进行命名
这里就需要使用到datetime模块中的now对象,
datetime.now()# 创建一个当前时间的对象
如图:
输出的样式不符合文件的命名规则,我们还需要使用到里面的now类方式
datetime.datetime.now().strftime('%Y-%m-%d-%H%M%S')
可以把格式转换成对应的格式
关闭当前的窗口
driver.close()
如果涉及到窗口的切换,还需要进行一定要进行窗口句柄的切换。否则会报错
弹窗
弹窗是在⻚⾯是找不到任何元素的,这种情况怎么处理?使⽤selenium提供的Alert接⼝
弹窗一般分为警告弹窗,提示弹窗以及确认弹窗。
警告弹窗:
确认弹窗:
提示弹窗:
要对弹窗进行操作,就要先定位到弹窗**,注意:必须触发弹窗**
alert = driver.switchTo.alert # 定位到弹窗
这里和切换到句柄不是一个样子,接下来我们可以对弹窗进行点击或者输入内容,
#确认
alert.accept()
#取消
alert.dismiss()
#输入内容
alert.send_keys("hello")
等待
强制等待
等待分为强制等待和隐式等待以及显示等待
其中强制等待虽然使用起来简单,但是效率低,等待够时间才能运行后面的代码
代码如下:
time.sleep(5)
不建议写
隐式等待
隐式等待是⼀种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码继续执⾏,直到超时没找到元素才会报错。
driver.implicitly_wait(5)
隐式等待的话,在规定时间内找到对应的元素就会执行后面的代码,这在某些情况下,节约了很多不必要的时间浪费。
隐式等待作⽤域是整个脚本的所有元素。即只要driver对象没有被释放掉( driver.quit() ),隐
式等待就⼀直⽣效。
显示等待
相对于隐式等待针对的是全局,显示等待的话,作用于局部
WebDriverWait(driver,sec).until(functions)
导入必要的模块:
你需要导入 WebDriverWait 和 expected_conditions 模块。
创建 WebDriverWait 对象:
设定最大等待时间和要等待的条件。
使用等待条件(funtion):
例如,等待元素可见、可点击等
涉及到selenium.support.ui.ExpectedConditions包下的 ExpectedConditions类
ExpectedConditions方法
进行判断该元素是否存在等,不存在就会报错
导入模块
from selenium.webdriver.support import expected_conditions
使用显示等待的好处:
能解决隐式等待无法解决的问题,例如等待弹窗,弹窗在页面中无法找到,隐式等待就会失效,
# 点击百度一下
chromeDriver.find_element(By.ID,"su").click()
# 显示等待,并判断元素是否存在
WebDriverWait(chromeDriver,10).until(expected_conditions.invisibility_of_element((By.CSS_SELECTOR,r"#\31 > div > div.cosc-card > div > div > h3 > a")))
time.sleep(3)
chromeDriver.find_element(By.CSS_SELECTOR,r"#\31 > div > div.cosc-card > div > div > h3 > a").click()
如图:
注意:
显示等待和隐式等待不能混用,但是强制等待可以
浏览器导航
打开⽹站
driver.get("https://tool.lu/")
浏览器的前进、后退、刷新
driver.back()
driver.forward()
driver.refresh()
如图:
文件上传
点击⽂件上传的场景下会弹窗系统窗⼝,进⾏⽂件的选择。selenium⽆法识别⾮web的控件,上传⽂件窗⼝为系统⾃带,⽆法识别窗⼝元素,但是可以使⽤sendkeys来上传指定路径的⽂件,达到的效果是⼀样的
driver.get("file:///D:/file/%E6%AF%94%E7%89%B9%E6%95%99%E5%8A%A1/%E6%B5%8B%E8%A
F%95/selenium4html/selenium-html/upload.html")
ele = driver.find_element(By.CSS_SELECTOR,"body > div > div >
input[type=file]")
ele.send_keys("D:\\file\\test.txt")