itnelo / reactphp-webdriver
一个异步、W3C 兼容的用于 Selenium Grid 服务器(hub)的 PHP 客户端
0.4.0
2021-02-24 21:46 UTC
Requires
- php: >=7.4
- react/http: ^1.2
- react/promise: ^2.8
- react/promise-timer: ^1.6
- react/stream: ^1.1
- symfony/options-resolver: ^5.1
Requires (Dev)
- php-webdriver/webdriver: ^1.9
README
这是从 RemoteWebDriver 逻辑直接移植的 php-webdriver/webdriver 包,该包利用 ReactPHP 事件循环和承诺 API,实现浏览器交互而不阻塞执行流程。
Selenium WebDriver 是一种用于从代码中操作浏览器(主要用于测试和网页抓取)的软件。更多信息请查看: https://selenium.net.cn。
此 PHP 客户端向 Grid 发送异步 HTTP 请求。它是命令的中心端点,是您的代码和浏览器实例之间的桥梁。有关获取自己的远程浏览器(或集群)的信息,请参阅 SeleniumHQ/docker-selenium。
祝您享受!
需求
- PHP 7.4 或更高版本。
- ReactPHP v1 (http ^1, stream ^1).
- Symfony 冲突:建议使用 5.1(或更高)版本的环境;该包使用(并将使用)其中的一些组件,并且可能需要审查它们的代码/版本约束,以包括更广泛的受支持环境(否则,您需要调整您的平台)。
安装
使用 composer
$ composer require itnelo/reactphp-webdriver:^0.4
如何使用
调用工厂方法以获取您的实例(推荐)。最小配置为
use React\EventLoop\Factory as LoopFactory; use Itnelo\React\WebDriver\WebDriverFactory; $loop = LoopFactory::create(); $webDriver = WebDriverFactory::create( $loop, [ 'hub' => [ 'host' => 'selenium-hub', 'port' => 4444, ], ] );
您可以自定义一组参数,用于底层的 ReactPHP Browser,并调整驱动器选项
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, ], ] );
手动配置(如果您更喜欢将每个组件作为独立的服务进行配置,例如编译 DI 容器并希望重用现有的服务定义)
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 );
请参阅自述文件中的 WebDriverInterface.php(和 ClientInterface.php),以获取 API 详细信息。并非所有方法和参数都已移植(仅移植了最必要的),因此如果您想获取更多内容,请随时提出问题/创建 pull request。
另请参阅
- php-webdriver/webdriver — 原始的、“阻塞”实现;获取有关如何使用某些高级方法的信息。例如,WebDriverKeys 辅助程序描述了用于向页面元素发送特殊输入的 Unicode 字符串(例如,
Ctrl
、Alt
和其他键)。
更改日志
本项目所有显著的更改都将记录在 CHANGELOG.md 中。