曲鸟全栈UI自动化教学(九):Selenium为什么慢?那是你加载策略设置不对

简介: 曲鸟全栈UI自动化教学(九):Selenium为什么慢?那是你加载策略设置不对

一、前言


有不少粉丝,甚至一些行业中有一定经验的朋友都说selenium性能差、很慢,打开一个网页要等半天才开始执行。初学的粉丝提出这个问题我能够理解,行业工作经验数年还这样说我就有点诧异了。看来很多小伙伴还是没有阅读官方文档的习惯,这里就简单的讲解一下为什么你会觉得selenium慢以及如何解决这个问题:


当我们通过webdriver(比如启动谷歌浏览器:webdriver.Chrome())启动浏览器时,会启动一个没有任何缓存、cookie的浏览器。这个时候通过driver.get("https://xxx")去访问页面自然是慢的,因为它需要加载该页面的资源,如果它的图片、样式、js文件过大时,这个时候就会变得更慢。


跟我们平时直接将浏览器清除缓存再访问是一个道理,这并不是Selnium本身性能存在缺陷。


但这时小伙伴们肯定会有疑惑,就算清了浏览器缓存重新访问,也没有通过Selnium来跑的那么慢呀!想要点击的按钮都出现半天了,它都还不进行点击,这不叫慢吗?


这其实跟Selenium的页面加载策略有关。


二、Selenium的页面加载策略详解


Selnium的页面加载策略(pageLoadStrategy)有三种:


normal:等待整个页面加载完毕再开始执行操作

eager:等待整个dom树加载完成,即DOMContentLoaded这个事件完成,也就是只要 HTML 完全加载和解析完毕就开始执行操作。放弃等待图片、样式、子帧的加载。

none:等待html下载完成,哪怕还没开始解析就开始执行操作。

默认情况下,当 Selenium WebDriver 加载页面时,它遵循的是normal加载策略,所以就会导致页面加载过慢,特别是在图片、样式等文件过大时,慢的就尤其明显了。


所以我们可以根据实际情况调整Selenium的页面加载策略来缩短等待时间,提高执行速度。


下图是默认情况(未手动指定加载策略)来访问爱奇艺首页,然后点击电影,共耗时:7s左右


87092b6e58254685a69b451af499c171.gif


下图是使用eager加载策略来访问爱奇艺首页,然后点击电影,共耗时:3.6s左右

配置代码如下:

chrome_options = Options()
chrome_options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=chrome_options)

image.gif


可以明显的看到访问速度变快了。


以为就这样了吗?还可以更快!

加载策略设置为none,并引入retry做重试(目的是为了防止报错,当然设置隐式等待也可,但没retry稳妥)可以只用2s左右就能执行完成,完整代码如下:

可以明显的看到访问速度变快了。
以为就这样了吗?还可以更快!
加载策略设置为none,并引入retry做重试(目的是为了防止报错,当然设置隐式等待也可,但没retry稳妥)可以只用2s左右就能执行完成,完整代码如下:


三、总结


所以selenium并不慢,只是你加载策略没有选择对而误认为它慢。


当我们遇到比较费解或疑惑的问题时,应该第一时间去看看官方文档,说不定它已经有了解决方案了。


另外,本专栏教程将无限期停止更新,因为最近在写更有意思、更干货的专栏《从0构建自动化测试平台》 欢迎订阅支持!


在线演示地址:http://121.43.43.59/ (帐号:admin 密码:123456)

目录
相关文章
|
11天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
46 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(一):unittest简单运行(初始化,清除,设置测试行为)
本文介绍了Python的unittest框架的基础用法,包括测试初始化(setup)、清除(tearDown)函数的使用,以及assertEqual和assertGreaterEqual等断言方法,并展示了如何创建测试用例,强调了测试函数需以test_开头才能被运行。
63 1
自动化测试项目学习笔记(一):unittest简单运行(初始化,清除,设置测试行为)
|
1月前
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
252 5
|
6月前
|
数据采集 Web App开发 搜索推荐
突破目标网站的反爬虫机制:Selenium策略分析
突破目标网站的反爬虫机制:Selenium策略分析
|
3月前
|
前端开发 测试技术 UED
【测试效率对比】深入分析:为何UI自动化测试的投资回报率通常低于接口自动化测试?
这篇文章深入分析了UI自动化测试与接口自动化测试的投资回报率(ROI)问题,指出UI自动化测试在某些情况下的ROI并不低,反驳了没有实施过UI自动化就轻易下结论的观点,并强调了实践的重要性和自动化测试在项目迭代中的作用。
82 1
|
3月前
|
Java Spring 开发者
解锁 Spring Boot 自动化配置的黑科技:带你走进一键配置的高效开发新时代,再也不怕繁琐设置!
【8月更文挑战第31天】Spring Boot 的自动化配置机制极大简化了开发流程,使开发者能专注业务逻辑。通过 `@SpringBootApplication` 注解组合,特别是 `@EnableAutoConfiguration`,Spring Boot 可自动激活所需配置。例如,添加 JPA 依赖后,只需在 `application.properties` 配置数据库信息,即可自动完成 JPA 和数据源设置。这一机制基于多种条件注解(如 `@ConditionalOnClass`)实现智能配置。深入理解该机制有助于提升开发效率并更好地解决问题。
72 0
|
6月前
|
数据采集 编解码
LabVIEW开发教学实验室自动化INL和DNL测试系统
LabVIEW开发教学实验室自动化INL和DNL测试系统
52 2
|
6月前
|
敏捷开发 监控 测试技术
探索自动化测试工具Selenium Grid的高效集成策略
【4月更文挑战第30天】在现代Web应用的快速迭代和持续部署中,测试自动化已成为确保产品质量的关键。Selenium Grid作为一款支持多种浏览器和操作系统的测试工具,提供了并行执行测试用例的能力,极大地提升了测试效率。本文将深入探讨如何高效地将Selenium Grid集成到现有的测试框架中,以及实施过程中的最佳实践,帮助团队最大化测试覆盖率,同时降低资源消耗。
|
6月前
|
前端开发 测试技术 持续交付
【Flutter 前端技术开发专栏】Flutter 中的 UI 测试与自动化测试
【4月更文挑战第30天】本文探讨了 Flutter 应用中UI测试和自动化测试的重要性,包括保障质量、提高效率和增强开发信心。Flutter提供`flutter_test`库进行Widget测试,以及`flutter_driver`进行集成测试。UI测试涵盖界面布局、交互和状态变化的验证,最佳实践建议尽早引入测试、保持用例简洁,并结合手动测试。未来,随着Flutter技术发展,UI测试和自动化测试将更加完善,助力开发高质量应用。
211 0
【Flutter 前端技术开发专栏】Flutter 中的 UI 测试与自动化测试
|
6月前
|
Web App开发 前端开发 Java
Selenium UI 自动化
Selenium UI 自动化