Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/itnelo/reactphp-webdriver
An async, W3C compliant PHP client for Selenium Grid server (hub) that uses event loop and promise API
https://github.com/itnelo/reactphp-webdriver
php-webdriver php74 reactphp selenium selenium-grid webdriver
Last synced: about 1 month ago
JSON representation
An async, W3C compliant PHP client for Selenium Grid server (hub) that uses event loop and promise API
- Host: GitHub
- URL: https://github.com/itnelo/reactphp-webdriver
- Owner: itnelo
- License: mit
- Created: 2020-11-30T02:39:24.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2021-02-24T21:47:36.000Z (over 3 years ago)
- Last Synced: 2024-09-29T20:01:29.896Z (about 1 month ago)
- Topics: php-webdriver, php74, reactphp, selenium, selenium-grid, webdriver
- Language: PHP
- Homepage:
- Size: 122 KB
- Stars: 4
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# ReactPHP WebDriver
This is a direct port of [RemoteWebDriver](https://github.com/php-webdriver/php-webdriver/blob/1.8.3/lib/Remote/RemoteWebDriver.php)
logic from the [php-webdriver/webdriver](https://github.com/php-webdriver/php-webdriver) package, which utilizes [ReactPHP](https://github.com/reactphp/reactphp)
event loop and promise API for browser interaction w/o execution flow blocking.**Selenium WebDriver** is a software that is used to manipulate browsers from the code (primarily, for testing and web scraping).
You can find more here: [https://selenium.dev](https://selenium.dev).This PHP client sends async HTTP requests to the [Grid](https://www.selenium.dev/documentation/en/grid). It is a central
endpoint for commands, a bridge between your code and browser instances. See
[SeleniumHQ/docker-selenium](https://github.com/SeleniumHQ/docker-selenium) to get your own remote browser (or a cluster).Enjoy!
## Requirements
- **PHP 7.4** or higher.
- ReactPHP v1 (http **^1**, stream **^1**).
- Symfony conflicts: 5.1 (or newer) environments are preferred; the package uses (and will use) some components from
there, and their code / version constraints may need a review, to include a wider range of supported environments
(otherwise, you need to adjust your platform).## Installation
With [composer](https://getcomposer.org/download):
```
$ composer require itnelo/reactphp-webdriver:^0.4
```## How to use
Call a factory method to get your instance (recommended). The minimal configuration is:
```php
use React\EventLoop\Factory as LoopFactory;
use Itnelo\React\WebDriver\WebDriverFactory;$loop = LoopFactory::create();
$webDriver = WebDriverFactory::create(
$loop,
[
'hub' => [
'host' => 'selenium-hub',
'port' => 4444,
],
]
);
```You can customize a set of parameters for the underlying [ReactPHP Browser](https://github.com/reactphp/http#browser)
and tune driver options:```php
use React\EventLoop\Factory as LoopFactory;
use Itnelo\React\WebDriver\WebDriverFactory;$loop = LoopFactory::create();
$webDriver = WebDriverFactory::create(
$loop,
[
'browser' => [
'tcp' => [
'bindto' => '192.169.56.10:0',
],
'tls' => [
'verify_peer' => false,
'verify_peer_name' => false,
],
],
'hub' => [
'host' => 'selenium-hub',
'port' => 4444,
],
'command' => [
'timeout' => 30,
],
]
);
```Manual configuration (if you prefer to configure each component as a separate service, e.g. compiling a DI container
and want to reuse existing service definitions):```php
use React\EventLoop\Factory as LoopFactory;
use React\Socket\Connector as SocketConnector;
use React\Http\Browser;
use Itnelo\React\WebDriver\Client\W3CClient;
use Itnelo\React\WebDriver\Timeout\Interceptor as TimeoutInterceptor;
use Itnelo\React\WebDriver\SeleniumHubDriver;$loop = LoopFactory::create();
$socketConnector = new SocketConnector(
$loop,
[
'tcp' => [
'bindto' => '192.169.56.10:0',
],
'tls' => [
'verify_peer' => false,
'verify_peer_name' => false,
],
]
);
$browser = new Browser($loop, $socketConnector);
$browser = $browser->withRejectErrorResponse(false);$hubClient = new W3CClient(
$browser,
[
'server' => [
'host' => 'selenium-hub',
'port' => 4444,
],
]
);$timeoutInterceptor = new TimeoutInterceptor($loop, 30);
$webDriver = new SeleniumHubDriver(
$loop,
$hubClient,
$timeoutInterceptor
);
```See a self-documented [WebDriverInterface.php](src/WebDriverInterface.php) (and [ClientInterface.php](src/ClientInterface.php))
for the API details. Not all methods and arguments are ported (only the most necessary), so feel free to open
an issue / make a pull request if you want more.## See also
- [php-webdriver/webdriver](https://github.com/php-webdriver/php-webdriver) — the original, "blocking" implementation;
to get information how to use some advanced methods. For example, [WebDriverKeys](https://github.com/php-webdriver/php-webdriver/blob/main/lib/WebDriverKeys.php#L10)
helper describes Unicode strings for sending special inputs to page elements (e.g. `Ctrl`, `Alt` and other keys).## Changelog
All notable changes to this project will be documented in [CHANGELOG.md](CHANGELOG.md).