dmore/chrome-mink-driver

无需Selenium即可控制Chrome的Mink驱动程序


README

无需Selenium即可控制Chrome的Mink驱动程序。

它通过HTTP和WebSockets直接与Google Chrome通信,这使得其至少比使用Selenium的Chrome快两倍。对于Chrome 59及以上版本,它支持无头模式,消除了安装显示服务器的需要及其带来的开销。该驱动程序已在1800个场景和19000个步骤的behat套件中进行测试和基准测试。它可以在不到18分钟内使用Chrome 60无头模式成功运行。同样套件在Chrome 58上与xvfb和Selenium一起运行需要约60分钟。

Gitlab CI pipeline OpenSSF Best Practices

安装

composer require dmore/chrome-mink-driver

要求

  • 运行带有远程调试功能的Google Chrome或Chromium。

示例

google-chrome-stable --remote-debugging-address=0.0.0.0 --remote-debugging-port=9222

或无头(v59+)

google-chrome-unstable --disable-gpu --headless --remote-debugging-address=0.0.0.0 --remote-debugging-port=9222

建议使用--disable-extensions标志启动Chrome。

查看https://gitlab.com/DMore/behat-chrome-skeleton以获取一个完全工作的示例。

贡献

欢迎贡献!使用问题队列和合并请求来提出更改。请参阅Gitlab文档了解如何使用Gitlab界面。

  • 要报告问题(错误、功能请求等),请使用问题队列
  • 如果您报告的是一个潜在的安全问题,请在向项目报告问题时检查“此问题是机密的”。
  • 要提出代码更改或问题的解决方案,请使用合并请求
  • 测试覆盖率在合并请求上执行。贡献应在可能的情况下扩展测试覆盖率并确保所有测试通过。
  • 在合并请求上执行编码标准检查。贡献应保持编码标准。

测试

该项目有测试覆盖率,您可以使用以下命令执行。

测试执行需要一个配置为从minkphp/driver-testsuite提供固定值的web服务器。这是由相关behat-chrome/docker-chrome-headless项目提供的Docker镜像提供的。执行的测试既包括针对此驱动程序特定的测试,也包括来自mink/driver-testsuite的更全面的测试套件,该测试套件是确保Mink驱动程序实现之间一致性的通用测试套件。

使用 make

命令目的
make install使用composer安装依赖
make test使用phpunit运行测试
make phpcbf使用phpcbf整理代码
make phpcs使用phpcs检查编码标准

没有 make

要在没有make的情况下执行这些任务,您可以在容器中执行上述相同的命令。

docker run --rm -it -v .:/code -e DOCROOT=/code/vendor/mink/driver-testsuite/web-fixtures registry.gitlab.com/behat-chrome/docker-chrome-headless bash

然后在容器shell中

composer install
vendor/bin/phpunit

版本控制和发布

用法

use Behat\Mink\Mink;
use Behat\Mink\Session;
use DMore\ChromeDriver\ChromeDriver;

$mink = new Mink([
  'browser' => new Session(new ChromeDriver('http://localhost:9222', null, 'http://www.google.com'))
]);

配置

选项描述
socketTimeoutint, 默认: 10连接超时(秒)
domWaitTimeoutint, 默认: 3000DOM就绪等待超时(毫秒)
downloadBehaviorallow, 默认, denyChrome开关,允许下载。(v62+)
downloadPath例如: /tmp/(默认值)如果允许,文件将下载到此处。

将配置值作为new ChromeDriver()的第三个参数传递。

渲染PDF和截图

尽管Mink功能支持打印PDF页面或捕获截图。

use Behat\Mink\Mink;
use Behat\Mink\Session;
use DMore\ChromeDriver\ChromeDriver;
$mink = new Mink(array(
    'browser' => new Session(new ChromeDriver('http://localhost:9222', null, 'http://www.google.com'))
));
$mink->setDefaultSessionName('browser');
$mink->getSession()->visit('https://gitlab.com/behat-chrome/chrome-mink-driver/blob/master/README.md');
$driver = $mink->getSession()->getDriver();
$driver->printToPdf('/tmp/readme.pdf');

可用选项在此处文档化:https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-printToPDF

使用Mink驱动器接口方法getScreenshot()支持截图。

相关项目

Behat扩展

要使用此驱动器与Behat,请尝试dmore/behat-chrome-extension Behat扩展

Docker镜像

使用Docker镜像来执行针对目标浏览器(s)的测试,并包括最新的Chrome Stable、Chrome Beta和Chromium。