【自动化测试函数 (下)】Web自动化攻坚:应对加载等待、浏览器导航与无头模式的自动化脚本艺术

🔥艾莉丝努力练剑:个人主页
❄专栏传送门:《C语言》、《数据结构与算法》、C/C++干货分享&学习过程记录、Linux操作系统编程详解、笔试/面试常见算法:从基础到进阶、测试开发要点全知道
⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平
🎬艾莉丝的简介:

🎬艾莉丝的测试开发博客简介:
目录
5 ~> 等待
5.1 强制等待
5.2 隐式等待
5.3 显示等待
6 ~> 浏览器导航
6.1 常见操作
6.1.1 打开网站
6.1.2 浏览器的前进、后退、刷新
7 ~> 文件上传
8 ~> 浏览器参数设置
8.1 设置无头模式
8.2 页面加载策略
结尾

5 ~> 等待
通常代码执行的速度比页面渲染的速度要快,如果避免因为渲染过慢出现的自动化误报的问题呢?可以使用selenium中提供的三种等待方法——


5.1 强制等待
time.sleep
优点:使用简单,调试的时候比较有效;
缺点:影响运行效率,浪费大量的时间。

5.2 隐式等待
隐式等待是一种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码继续执行,直到超时没找到元素才会报错。
implicitly_wait(),参数:秒。
举个例子:
#隐式等待5秒
driver.implicitly_wait(5)
隐式等待作用域是整个脚本的所有元素。即只要driver对象没有被释放掉(driver.quit()),隐式等待就一直生效。
优点:智能等待,作用于全局。

5.3 显示等待
5.3.1 显示等待也是一种智能等待
显示等待也是一种智能等待,在指定超时时间范围内只要满足操作的条件就会继续执行后续代码:
WebDriverWait(driver,sec).until(functions)
functions:涉及到selenium.support.ui.ExpectedConditions包下的ExpectedConditions类。
ExpectedConditions下涉及到的方法:ExpectedConditions下涉及到的方法
举个例子:
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver,2)
wait.until(EC.invisibility_of_element((By.XPATH,'//*
[@id="2"]/div/div/div[3]/div[1]/div[1]/div')))

ExpectedConditions预定义方法的一些示例——
| 方法 | 说明 |
|---|---|
title_is(title) | 检查页面标题的期望值 |
title_contains(title) | 检查标题是否包含区分大小写的子字符串的期望值 |
visibility_of_element_located((locator, str])) | 检查元素是否存在于页面的DOM上并且可见的期望值 |
presence_of_element_located((locator, str])) | 用于检查元素是否存在于页面的DOM上的期望值 |
visibility_of(element) | 检查已知存在于页面DOM上的元素是否可见的期望值 |
alert_is_present() | 检查是否出现弹窗 |

优点:显示等待是智能等待,可以自定义显示等待的条件,操作灵活;
缺点:写法复杂。

5.3.2 隐式等待和显示等待
隐式等待和显示等待一起使用效果如何呢?我们来测试一下——
#隐式等待设置为10s,显⽰等待设置为15s,那么结果会是5+10=15s吗?
driver.implicitly_wait(10)
wait = WebDriverWait(driver,15)
start = time.time()
try:res = wait.until(EC.presence_of_element_located((By.XPATH,'//*
[@id="2"]/div/div/div[3]/div[1]/div[1]/div/div/div')))
except:end = time.time()print("no such element")
driver.quit()
print(end-start)

结果:重试多次,设置10秒的隐式等待和15秒的显式等待导致20秒后发生超时。
不要混合隐式和显式等待,可能会导致不可预测的等待时间。

6 ~> 浏览器导航
6.1 常见操作
6.1.1 打开网站
driver.get("https://tool.lu/")
6.1.2 浏览器的前进、后退、刷新
driver.back()
driver.forward()
driver.refresh()

案例:百度首页测试在线工具标签入口。
7 ~> 文件上传
点击文件上传的场景下会弹窗系统窗口,进行文件的选择。
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")

8 ~> 浏览器参数设置

8.1 设置无头模式
options = webdriver.ChromeOptions()
options.add_argument("-headless")
driver =
webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()),options
=options)

8.2 页面加载策略
options.page_load_strategy='加载方式'
页面加载方式主要有三种类型:

| 策略 | 说明 |
|---|---|
normal | 默认值,等待所有资源下载完成。 |
eager | DOM 访问已准备就绪,但诸如图像的其他资源可能仍在加载。 |
none | 完全不会阻塞 WebDriver。 |
options = webdriver.ChromeOptions()
options.page_load_strategy = 'eager'
driver =
webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()),options
=options)

结尾
本文的内容到这里就全部结束了,感谢您的阅读!
往期回顾:
【自动化测试函数 (上)】Web自动化测试实战精要:定位、操作与窗口管理三部曲
结语:本期我们学习了测试开发/测试内容中的自动化测试常用函数篇,希望对学习测试开发/测试相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!
🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡
૮₍ ˶ ˊ ᴥ ˋ˶₎ა

