首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【自动化测试函数 (下)】Web自动化攻坚:应对加载等待、浏览器导航与无头模式的自动化脚本艺术

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

作者头像
艾莉丝努力练剑
发布2025-11-13 10:58:06
发布2025-11-13 10:58:06
670
举报
文章被收录于专栏:C / C++C / C++

🔥艾莉丝努力练剑:个人主页

专栏传送门:《C语言》《数据结构与算法》C/C++干货分享&学习过程记录Linux操作系统编程详解笔试/面试常见算法:从基础到进阶测试开发要点全知道

⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平


🎬艾莉丝的简介:


🎬艾莉丝的测试开发博客简介:

5 ~> 等待

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

5.1 强制等待

time.sleep

优点:使用简单,调试的时候比较有效; 缺点:影响运行效率,浪费大量的时间。

5.2 隐式等待

隐式等待是一种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码继续执行,直到超时没找到元素才会报错。

implicitly_wait(),参数:秒。

举个例子:

代码语言:javascript
复制
#隐式等待5秒 
driver.implicitly_wait(5)

隐式等待作用域是整个脚本的所有元素。即只要driver对象没有被释放掉(driver.quit()),隐式等待就一直生效。

优点:智能等待,作用于全局。

5.3 显示等待

5.3.1 显示等待也是一种智能等待

显示等待也是一种智能等待,在指定超时时间范围内只要满足操作的条件就会继续执行后续代码:

代码语言:javascript
复制
WebDriverWait(driver,sec).until(functions)

functions:涉及到selenium.support.ui.ExpectedConditions包下的ExpectedConditions类。

ExpectedConditions下涉及到的方法:ExpectedConditions下涉及到的方法

举个例子:

代码语言:javascript
复制
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 隐式等待和显示等待

隐式等待和显示等待一起使用效果如何呢?我们来测试一下——

代码语言:javascript
复制
#隐式等待设置为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 打开网站
代码语言:javascript
复制
driver.get("https://tool.lu/")
6.1.2 浏览器的前进、后退、刷新
代码语言:javascript
复制
driver.back()
driver.forward()
driver.refresh()

案例:百度首页测试在线工具标签入口。


7 ~> 文件上传

点击文件上传的场景下会弹窗系统窗口,进行文件的选择。

selenium无法识别非web的控件,上传文件窗口为系统自带,无法识别窗口元素。

但是可以使用sendkeys来上传指定路径的文件,达到的效果是一样的。

代码语言:javascript
复制
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 设置无头模式

代码语言:javascript
复制
options = webdriver.ChromeOptions()
options.add_argument("-headless")
driver = 
webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()),options
=options)

8.2 页面加载策略

代码语言:javascript
复制
options.page_load_strategy='加载方式'

页面加载方式主要有三种类型:

策略

说明

normal

默认值,等待所有资源下载完成。

eager

DOM 访问已准备就绪,但诸如图像的其他资源可能仍在加载。

none

完全不会阻塞 WebDriver。

代码语言:javascript
复制
options = webdriver.ChromeOptions()
options.page_load_strategy = 'eager'
driver = 
webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()),options
=options)

结尾

本文的内容到这里就全部结束了,感谢您的阅读!

往期回顾:

【自动化测试函数 (上)】Web自动化测试实战精要:定位、操作与窗口管理三部曲

结语:本期我们学习了测试开发/测试内容中的自动化测试常用函数篇,希望对学习测试开发/测试相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 5 ~> 等待
    • 5.1 强制等待
    • 5.2 隐式等待
    • 5.3 显示等待
      • 5.3.1 显示等待也是一种智能等待
      • 5.3.2 隐式等待和显示等待
  • 6 ~> 浏览器导航
    • 6.1 常见操作
      • 6.1.1 打开网站
      • 6.1.2 浏览器的前进、后退、刷新
  • 7 ~> 文件上传
  • 8 ~> 浏览器参数设置
    • 8.1 设置无头模式
    • 8.2 页面加载策略
  • 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档