itnelo/reactphp-webdriver

一个异步、W3C 兼容的用于 Selenium Grid 服务器(hub)的 PHP 客户端

0.4.0 2021-02-24 21:46 UTC

This package is auto-updated.

Last update: 2024-09-25 06:13:42 UTC


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 字符串(例如,CtrlAlt 和其他键)。

更改日志

本项目所有显著的更改都将记录在 CHANGELOG.md 中。