资讯专栏INFORMATION COLUMN

使用浏览器的HEADLESS模式进行自动化测试

lanffy / 2299人阅读

摘要:了解模式指的是不需要用户界面的浏览器,这种浏览器在自动化测试和爬虫领域有着广泛的应用。实践使用浏览器的模式进行自动化测试,你需要先满足以下前提运行环境或者或者最新版已加入万事俱备,废话不多说我们直接上演示代码。

了解HEADLESS模式

HEADLESS BROWSER 指的是不需要用户界面的浏览器,这种浏览器在自动化测试和爬虫领域有着广泛的应用。

例如你想在网页上运行一些测试,从网页抓取信息,检查浏览器访问某些资源的状态,定时截取网页等等,你需要的是浏览器处理网页但不一定需要浏览器界面,这些情况都是HEADLESS BROWSER的应用场景。

Chrome 从 59.0 开始支持HEADLESS模式(2017年5月),Firefox从 55.0 开始也支持了HEADLESS模式(2017年9月)。也就是在今年2018年的4月份,老牌的无头浏览器 PhantomJS 的核心开发者宣布不再维护该项目,因为Chrome 和Firefox的HEADLESS模式已经足够好并可以替代PhantomJS。

实践 Selenium + HEADLESS

使用浏览器的HEADLESS模式进行自动化测试,你需要先满足以下前提:

Python + Selenium 运行环境

Chrome 59+ 或者 Firefox 55+

ChromeDriver 或者 GeckoDriver 最新版已加入PATH

万事俱备,废话不多说我们直接上演示代码。

Chrome版实例
from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless")
options.add_argument("--disable-gpu") # 允许在无GPU的环境下运行,可选
options.add_argument("--window-size=1920x1080") # 建议设置

browser = webdriver.Chrome(chrome_options=options)
browser.get("https://www.baidu.com")
browser.find_element_by_id("kw").send_keys("HELLO")
browser.find_element_by_id("su").click()

sleep(1) # 简单粗暴的等待,实际项目中勿用
assert browser.title == u"HELLO_百度搜索"
browser.save_screenshot("chrome-headless-test.png")
Firefox版实例
from time import sleep
from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.add_argument("--headless")
# options.add_argument("--window-size=1920x1080") # Firefox无效

browser = webdriver.Firefox(firefox_options=options)
browser.set_window_size(1280, 1024) # 启动后设置浏览器大小,但是高度会随着访问的网页变化

browser.get("https://www.baidu.com")
browser.find_element_by_id("kw").send_keys("HELLO")
browser.find_element_by_id("su").click()

sleep(1)
assert browser.title == u"HELLO_百度搜索"
browser.save_screenshot("firefox-headless-test.png")
总结

浏览器HEADLESS模式可以让程序运行的环境更贴近用户访问的真实环境,相对于模拟UserAgent等方式得出的数据也会更加准确可靠。

尤其在自动化测试领域,HEADLESS也有取代传统的带界面的自动化测试的趋势,有一些公司已经将实践投入生产中。我们可以在调试自动化测试时使用用户界面,当部署到持续集成环境中是启用HEADLESS,并开启多线程使用并行的方式来运行测试案例,这样效率会大大提高,而且因为界面被干扰而导致测试失败的概率也会降低。

总的来说,至少在端对端的自动化测试中,HEADLESS模式没有明显的缺点,甚至可以成为网页自动化测试进化的下一个目标。

参考文档

https://developer.mozilla.org...

https://intoli.com/blog/runni...

https://developers.google.com...

https://about.gitlab.com/2017...

关于作者:

Toby Qin, Python 技术爱好者,目前从事测试开发相关工作,转载请注明原文出处。

欢迎关注我的博客 https://betacat.online,你可以到我的公众号中去当吃瓜群众。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41742.html

相关文章

  • 使用 headless chrome进行测试

    注:文章聚合了现在 headless chrome 介绍和使用方式 包含了三个部分 chrome 在 mac 上的安装和简单使用(来自官方) 利用 selenium 的 webdrive 驱动 headless chrome(自己添加) 利用Xvfb方式实现伪 headless chrome 概念 Headless模式解决了什么问题: 自动化工具例如 selenium 利用有头浏览器进行测试...

    ephererid 评论0 收藏0
  • 前端每周清单第 29 期:Web 现状分析与优化策略、Vue 单元测试Headless Chrom

    摘要:前端每周清单第期现状分析与优化策略单元测试爬虫作者王下邀月熊编辑徐川前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点分为新闻热点开发教程工程实践深度阅读开源项目巅峰人生等栏目。 showImg(https://segmentfault.com/img/remote/1460000011008022); 前端每周清单第 29 期:Web 现状分析与优化策略...

    HackerShell 评论0 收藏0
  • 不可错过动化测试框架:robotframework之WebDriver功能配置

    摘要:使用图设置浏览器语言为英文方法图设置浏览器语言为英文方法结果功能该功能最常见的用法就是使用该功能配置屏蔽网站对爬虫等自动化程序的检测。 rf(即robotframework)是自动化测试常用的框架之一,在前端自动化测试中常与webdriver驱动器,以及rf的selenium2library...

    zhouzhou 评论0 收藏0
  • Puppeteer 初探

    摘要:抓取并生成预先呈现的内容即。自动表单提交,测试,键盘输入等。创建一个最新的自动化测试环境。使用最新的的和浏览器功能,直接在最新版本的浏览器中运行测试。捕获您网站的时间线跟踪,以帮助诊断性能问题。 木偶 Puppeteer 更友好的 Headless Chrome Node API木偶也是有心的 (=・ω・=) showImg(https://segmentfault.com/img/b...

    oysun 评论0 收藏0
  • Google推出爬虫新神器:Pyppeteer,神挡杀神,佛挡杀佛!

    摘要:注意,是叫做,不是。两款浏览器同根同源,它们有着同样的,但配色不同,由蓝红绿黄四种颜色组成,而由不同深度的蓝色构成。另外是基于的新特性实现的,所以它的一些执行也支持异步操作,效率相对于来说也提高了。是否响应信号,一般是命令,默认是。 如果大家对 Python 爬虫有所了解的话,想必你应该听说过 Selenium 这个库,这实际上是一个自动化测试工具,现在已经被广泛用于网络爬虫中来应对 ...

    Fundebug 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<