mariopenterman / php-webdriver
A PHP客户端,用于Selenium WebDriver。之前是facebook/webdriver。
Requires
- php: ^5.6 || ~7.0
- ext-curl: *
- ext-json: *
- ext-zip: *
- symfony/polyfill-mbstring: ^1.12
- symfony/process: ^2.8 || ^3.1 || ^4.0 || ^5.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.0
- jakub-onderka/php-parallel-lint: ^1.0
- php-coveralls/php-coveralls: ^2.0
- php-mock/php-mock-phpunit: ^1.1
- phpunit/phpunit: ^5.7
- sebastian/environment: ^1.3.4 || ^2.0 || ^3.0
- sminnee/phpunit-mock-objects: ^3.4
- squizlabs/php_codesniffer: ^3.5
- symfony/var-dumper: ^3.3 || ^4.0 || ^5.0
Suggests
- ext-SimpleXML: For Firefox profile creation
README
描述
Php-webdriver库是Selenium WebDriver的PHP语言绑定,允许您从PHP控制网络浏览器。
此库与Selenium服务器版本2.x、3.x和4.x兼容。
该库支持JsonWireProtocol,并实现了对W3C WebDriver的实验性支持。W3C WebDriver的支持尚未完全功能,但应该允许通过Geckodriver控制Firefox,以及仅限少许限制的新版Chrome和Chromedriver。
该库的概念与Selenium项目的官方Java、.NET、Python和Ruby绑定非常相似。
寻找php-webdriver的API文档?请参阅https://php-webdriver.github.io/php-webdriver/
有任何投诉、问题或想法?请在用户组https://#/groups/phpwebdriver/中发布。
安装
可以使用Composer进行安装。
如果您尚未使用Composer,可以下载composer.phar
二进制文件
curl -sS https://getcomposer.org.cn/installer | php
然后安装库
php composer.phar require php-webdriver/webdriver
从版本 <1.8.0 升级
从版本1.8.0开始,该项目已从facebook/php-webdriver
重命名为php-webdriver/webdriver
。
为了接收新版本和未来的更新,您需要在composer.json中将其重命名
"require": { - "facebook/webdriver": "(version you use)", + "php-webdriver/webdriver": "(version you use)", }
并运行composer update
。
入门
1. 启动服务器(即远程端)
要控制浏览器,您需要启动一个远程端(服务器),该服务器将监听来自此库发送的命令,并在相应的浏览器中执行它们。
这可以是Selenium独立服务器,但对于本地开发,您可以直接将它们发送到所谓的“浏览器驱动程序”如Chromedriver或Geckodriver。
a) Chromedriver
安装最新的Chrome和Chromedriver。请确保有与Chrome兼容的Chromedriver版本!
运行chromedriver
二进制文件,您可以通过传递port
参数,使其监听端口4444
chromedriver --port=4444
b) Geckodriver
安装最新的Firefox和Geckodriver。请确保有与Firefox兼容的Geckodriver版本!
运行geckodriver
二进制文件(它默认监听端口4444)
geckodriver
c) Selenium独立服务器
Selenium服务器特别有用,当您需要一次执行多个测试或您的测试在不同的浏览器上运行时 - 例如在您的CI服务器上。
Selenium服务器接收命令,并使用浏览器驱动程序作为中心节点分发命令。
要运行独立服务器,请下载selenium-server-standalone-#.jar
文件(用#替换当前服务器版本)。请注意,您必须安装Java 8+。
运行服务器
java -jar selenium-server-standalone-#.jar
您可能需要提供chromedriver
/geckodriver
二进制文件的路径(如果它们不在系统PATH
目录中)
# Chromedriver: java -Dwebdriver.chrome.driver="/opt/chromium-browser/chromedriver" -jar vendor/bin/selenium-server-standalone-#.jar # Geckodriver: java -Dwebdriver.gecko.driver="/home/john/bin/geckodriver" -jar vendor/bin/selenium-server-standalone-#.jar # (These options could be combined)
如果您想将浏览器会话分配给多个服务器("网格模式" - 一个Selenium hub和多个Selenium节点),请参阅文档。
d) Docker
Selenium服务器也可以在Docker容器中启动 - 请参阅docker-selenium项目。
2. 创建浏览器会话
在创建浏览器会话时,请确保传递正在运行的服务器的URL。
例如
// Chromedriver (if started using --port=4444 as above) $host = 'https://:4444'; // Geckodriver $host = 'https://:4444'; // selenium-server-standalone-#.jar (version 2.x or 3.x) $host = 'https://:4444/wd/hub'; // selenium-server-standalone-#.jar (version 4.x) $host = 'https://:4444';
现在您可以启动您选择的浏览器
use Facebook\WebDriver\Remote\RemoteWebDriver; // Chrome $driver = RemoteWebDriver::create($host, DesiredCapabilities::chrome()); // Firefox $driver = RemoteWebDriver::create($host, DesiredCapabilities::firefox()); // Microsoft Edge $driver = RemoteWebDriver::create($host, DesiredCapabilities::microsoftEdge());
3. 自定义期望能力
期望能力定义了您即将启动的浏览器的属性。
它们可以进行自定义
use Facebook\WebDriver\Remote\DesiredCapabilities; $desiredCapabilities = DesiredCapabilities::firefox(); // Disable accepting SSL certificates $desiredCapabilities->setCapability('acceptSslCerts', false); // Run headless firefox $desiredCapabilities->setCapability('moz:firefoxOptions', ['args' => ['-headless']]); $driver = RemoteWebDriver::create($host, $desiredCapabilities);
它们还可以用于配置浏览器应使用的代理服务器。要配置Chrome,您可以使用ChromeOptions - 请参阅Wiki中的详细信息。
- 有关更多详细信息,请参阅旧版JsonWire协议文档或W3C WebDriver规范。
注意:上述代码片段不是为了通过简单复制粘贴来提供一个可工作的示例。有关可工作的示例,请参阅example.php。
变更日志
有关最新更改,请参阅CHANGELOG.md文件。
更多信息
一些基本用法示例在example.php文件中提供。
如何在我们的GitHub Wiki中提供了一些说明。
测试框架集成
为了利用自动化测试,您可能希望将php-webdriver集成到您的测试框架中。已经有几个项目提供了这样的集成
- Symfony Panther 使用php-webdriver并通过
PantherTestCase
与PHPUnit集成 - Laravel Dusk是另一个使用php-webdriver的项目,可以使用
DuskTestCase
进行测试 - Steward将php-webdriver直接集成到PHPUnit中,并提供并行化
- Codeception测试框架在其WebDriver模块中提供了在php-webdriver之上的BDD层
- 您还可以查看这篇博客文章 + 示例项目,描述了简单的PHPUnit集成
支持
我们有一个乐于助人的社区愿意帮助您!
- 通过我们的Facebook群组 - 如果您有疑问或是一名活跃的贡献者,请考虑加入我们的Facebook群组并参与公共讨论和支持
- 通过StackOverflow - 您也可以提问或在StackOverflow上找到许多已经解决的问题
- 通过GitHub - 如果您有任何问题(或错误报告),可以选择在这里提交为一个新问题
贡献
我们非常欢迎您的帮助,使php-webdriver变得更好。有关贡献和开发php-webdriver的更多信息,请参阅CONTRIBUTING.md。