php-webdriver/webdriver
Composer 安装命令:
composer require php-webdriver/webdriver
包简介
A PHP client for Selenium WebDriver. Previously facebook/webdriver.
README 文档
README
Description
Php-webdriver library is PHP language binding for Selenium WebDriver, which allows you to control web browsers from PHP.
This library is compatible with Selenium server version 2.x, 3.x and 4.x.
The library supports modern W3C WebDriver protocol, as well as legacy JsonWireProtocol.
The concepts of this library are very similar to the "official" Java, JavaScript, .NET, Python and Ruby libraries which are developed as part of the Selenium project.
Installation
Installation is possible using Composer.
If you don't already use Composer, you can download the composer.phar binary:
curl -sS https://getcomposer.org/installer | php
Then install the library:
php composer.phar require php-webdriver/webdriver
Upgrade from version <1.8.0
Starting from version 1.8.0, the project has been renamed from facebook/php-webdriver to php-webdriver/webdriver.
In order to receive the new version and future updates, you need to rename it in your composer.json:
"require": {
- "facebook/webdriver": "(version you use)",
+ "php-webdriver/webdriver": "(version you use)",
}
and run composer update.
Getting started
1. Start server (aka. remote end)
To control a browser, you need to start a remote end (server), which will listen to the commands sent from this library and will execute them in the respective browser.
This could be Selenium standalone server, but for local development, you can send them directly to so-called "browser driver" like Chromedriver or Geckodriver.
a) Chromedriver
📙 Below you will find a simple example. Make sure to read our wiki for more information on Chrome/Chromedriver.
Install the latest Chrome and Chromedriver. Make sure to have a compatible version of Chromedriver and Chrome!
Run chromedriver binary, you can pass port argument, so that it listens on port 4444:
chromedriver --port=4444
b) Geckodriver
📙 Below you will find a simple example. Make sure to read our wiki for more information on Firefox/Geckodriver.
Install the latest Firefox and Geckodriver. Make sure to have a compatible version of Geckodriver and Firefox!
Run geckodriver binary (it start to listen on port 4444 by default):
geckodriver
c) Selenium standalone server
Selenium server can be useful when you need to execute multiple tests at once, when you run tests in several different browsers (like on your CI server), or when you need to distribute tests amongst several machines in grid mode (where one Selenium server acts as a hub, and others connect to it as nodes).
Selenium server then act like a proxy and takes care of distributing commands to the respective nodes.
The latest version can be found on the Selenium download page.
📙 You can find further Selenium server information in our wiki.
d) Docker
Selenium server could also be started inside Docker container - see docker-selenium project.
2. Create a Browser Session
When creating a browser session, be sure to pass the url of your running server.
For example:
// Chromedriver (if started using --port=4444 as above) $serverUrl = 'http://localhost:4444'; // Geckodriver $serverUrl = 'http://localhost:4444'; // selenium-server-standalone-#.jar (version 2.x or 3.x) $serverUrl = 'http://localhost:4444/wd/hub'; // selenium-server-standalone-#.jar (version 4.x) $serverUrl = 'http://localhost:4444';
Now you can start browser of your choice:
use Facebook\WebDriver\Remote\RemoteWebDriver; // Chrome $driver = RemoteWebDriver::create($serverUrl, DesiredCapabilities::chrome()); // Firefox $driver = RemoteWebDriver::create($serverUrl, DesiredCapabilities::firefox()); // Microsoft Edge $driver = RemoteWebDriver::create($serverUrl, DesiredCapabilities::microsoftEdge());
3. Customize Desired Capabilities
Desired capabilities define properties of the browser you are about to start.
They can be customized:
use Facebook\WebDriver\Firefox\FirefoxOptions; use Facebook\WebDriver\Remote\DesiredCapabilities; $desiredCapabilities = DesiredCapabilities::firefox(); // Disable accepting SSL certificates $desiredCapabilities->setCapability('acceptSslCerts', false); // Add arguments via FirefoxOptions to start headless firefox $firefoxOptions = new FirefoxOptions(); $firefoxOptions->addArguments(['-headless']); $desiredCapabilities->setCapability(FirefoxOptions::CAPABILITY, $firefoxOptions); $driver = RemoteWebDriver::create($serverUrl, $desiredCapabilities);
Capabilities can also be used to 📙 configure a proxy server which the browser should use.
To configure browser-specific capabilities, you may use 📙 ChromeOptions or 📙 FirefoxOptions.
- See legacy JsonWire protocol documentation or W3C WebDriver specification for more details.
4. Control your browser
// Go to URL $driver->get('https://en.wikipedia.org/wiki/Selenium_(software)'); // Find search element by its id, write 'PHP' inside and submit $driver->findElement(WebDriverBy::id('searchInput')) // find search input element ->sendKeys('PHP') // fill the search box ->submit(); // submit the whole form // Find element of 'History' item in menu by its css selector $historyButton = $driver->findElement( WebDriverBy::cssSelector('#ca-history a') ); // Read text of the element and print it to output echo 'About to click to a button with text: ' . $historyButton->getText(); // Click the element to navigate to revision history page $historyButton->click(); // Make sure to always call quit() at the end to terminate the browser session $driver->quit();
See example.php for full example scenario. Visit our GitHub wiki for 📙 php-webdriver command reference and further examples.
NOTE: Above snippets are not intended to be a working example by simply copy-pasting. See example.php for a working example.
Changelog
For latest changes see CHANGELOG.md file.
More information
Some basic usage example is provided in example.php file.
How-tos are provided right here in 📙 our GitHub wiki.
If you don't use IDE, you may use API documentation of php-webdriver.
You may also want to check out the Selenium project docs and wiki.
Testing framework integration
To take advantage of automatized testing you may want to integrate php-webdriver to your testing framework. There are some projects already providing this:
- Symfony Panther uses php-webdriver and integrates with PHPUnit using
PantherTestCase - Laravel Dusk is another project using php-webdriver, could be used for testing via
DuskTestCase - Steward integrates php-webdriver directly to PHPUnit, and provides parallelization
- Codeception testing framework provides BDD-layer on top of php-webdriver in its WebDriver module
- You can also check out this blogpost + demo project, describing simple PHPUnit integration
Support
We have a great community willing to help you!
❓ Do you have a question, idea or some general feedback? Visit our Discussions page. (Alternatively, you can look for many answered questions also on StackOverflow).
🐛 Something isn't working, and you want to report a bug? Submit it here as a new issue.
📙 Looking for a how-to or reference documentation? See our wiki.
Contributing ❤️
We love to have your help to make php-webdriver better. See CONTRIBUTING.md for more information about contributing and developing php-webdriver.
Php-webdriver is community project - if you want to join the effort with maintaining and developing this library, the best is to look on issues marked with "help wanted" label. Let us know in the issue comments if you want to contribute and if you want any guidance, and we will be delighted to help you to prepare your pull request.
php-webdriver/webdriver 适用场景与选型建议
php-webdriver/webdriver 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 98.26M 次下载、GitHub Stars 达 5.21k, 最近一次更新时间为 2020 年 01 月 17 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「selenium」 「webdriver」 「Chromedriver」 「geckodriver」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 php-webdriver/webdriver 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 php-webdriver/webdriver 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 php-webdriver/webdriver 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Utility for downloading Microsoft Edge Driver binary with browser version detection
Selenium4 (WebDriver) driver for Mink framework
Easily run Laravel Dusk tests on BrowserStack.
PHP Library for Selenium
Selenium driver for Mink framework
Selenium Server integration for PHPUnit
统计信息
- 总下载量: 98.26M
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 5236
- 点击次数: 53
- 依赖项目数: 127
- 推荐数: 3
其他信息
- 授权协议: MIT
- 更新时间: 2020-01-17