Web 自动化测试神器之 Headless browser

本贴最后更新于 364 天前,其中的信息可能已经时移世改

背景

大家都知道,我们在通过Selenium执行web自动化测试时,每次都需要启动/关闭浏览器,如果是多线程执行还会同时打开多个,比较影响工作的正常进行。那有没有办法可以不用让浏览器的自动化执行干扰我们的工作呢?

image.png

无头浏览器(Headless browser)

无头浏览器是指没有图形化界面的web浏览器。

能够提供类似于普通web浏览器的环境,但运行的时候是通过命令行或者网络的通讯的方式。

无头浏览器能够做啥?

目前无头浏览器主要的应用场景有以下几点

  1. 做web自动化测试
  2. 对web页面进行截图
  3. web爬虫

无头浏览器有哪些?

  1. Chrome Headless,Chrome从59版本开始支持
  2. Firefox Headless,Firefox从56版本开始支持
  3. PhantomJS,使用JavaScript编写的无头浏览器,能够支持Windows, macOS, Linux
  4. Splash,使用Python编写的无头浏览器,使用WebKit作为引擎
  5. HtmlUnit,使用Java编写的无头浏览器,使用Rhino engine作为引擎
  6. ...

使用Selenium操作Chrome headless

在Mac和Linux平台,Chrome 从59版本开始支持无头模式。而在Windows平台,从60版本才开始支持。

https://developers.google.com/web/updates/2017/04/headless-chrome

Selenium WebDriver可以通过API控制Chrome Headless,使用非常简单:

ChromeOptions options = new ChromeOptions();
//设置无头模式
options.addArguments("--headless");
ChromeDriver driver = new ChromeDriver(options);

使用Selenium操作Firefox headless

从Firefox 56版本开始,所有平台(Windows、Mac、Linux)都支持Firefox 的headless模式

以下是来自官网的说明:

代码设置也非常简单

FirefoxOptions options = new FirefoxOptions();
options.addArguments("-headless");
FirefoxDriver driver = new FirefoxDriver(options);

使用Selenium操作PhantomJS

需要注意的是,旧版本Selenium能够支持PhantomJS,较新版本Selenium中已经不再支持了

UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead

所以Selenium官方推荐使用Chrome 或者Firefox的无头浏览器模式了。

回帖
请输入回帖内容 ...