【问题标题】:How to add Options through Facebook/php-webdriver?如何通过 Facebook/php-webdriver 添加选项?
【发布时间】:2019-03-28 06:46:18
【问题描述】:

我正在寻求为 Facebook/php-webdriver 实例添加选项。

这可以获取初始选项:

$options = \Facebook\WebDriver\Remote\DesiredCapabilities::chrome();

现在我想添加其他选项:

$options.setCapability("enablePassThrough", FALSE);
$options.setCapability("no-sandbox", TRUE);

我收到了错误:

Call to undefined function setCapability()

我尝试了几种方法,但还没有找到方法。

向 Facebook/php-webdriver 实例添加选项的正确方法是什么?

【问题讨论】:

    标签: selenium selenium-webdriver selenium-chromedriver facebook-php-webdriver php-webdriver


    【解决方案1】:
    $options = new ChromeOptions();
    $options->addArguments(array('--no-sandbox'));
    $capabilities = DesiredCapabilities::chrome();
    $capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
    

    【讨论】:

    【解决方案2】:

    此语法适用于我的系统:

        $options = new \Facebook\WebDriver\Chrome\ChromeOptions();
        $options->addArguments(array('--no-sandbox'));
        $capabilities = \Facebook\WebDriver\Remote\DesiredCapabilities::chrome();
        $capabilities->setCapability(\Facebook\WebDriver\Chrome\ChromeOptions::CAPABILITY, $options);
        $seleniumDriver = \Facebook\WebDriver\Remote\RemoteWebDriver::create(
            $host,
            $capabilities,
            5000
        );
    

    【讨论】:

    • 除了复制 Class 的绝对路径即 new ChromeOptions() 被更改为 @ 之外,我没有看到您的代码有任何重大变化987654323@等等。
    【解决方案3】:

    setCapability()

    setCapability() 方法通过 DesiredCapabilities() 的实例为 WebDriver 实例配置 capabilities,如下所示:

    public function testShouldProvideAccessToCapabilitiesUsingSettersAndGetters()
    {
        $capabilities = new DesiredCapabilities();
        // generic capability setter
        $capabilities->setCapability('custom', 1337);
        // specific setters
        $capabilities->setBrowserName(WebDriverBrowserType::CHROME);
        $capabilities->setPlatform(WebDriverPlatform::LINUX);
        $capabilities->setVersion(333);
        $this->assertSame(1337, $capabilities->getCapability('custom'));
        $this->assertSame(WebDriverBrowserType::CHROME, $capabilities->getBrowserName());
        $this->assertSame(WebDriverPlatform::LINUX, $capabilities->getPlatform());
        $this->assertSame(333, $capabilities->getVersion());
    }
    

    --no-sandbox

    -no-sandbox argument 可以通过ChromeOptions() 的实例添加,进一步可以添加到 DesiredCapabilities() 的实例中,如下所示:

    $options = new ChromeOptions();
    $options->addArguments(array('--no-sandbox'));
    $capabilities = DesiredCapabilities::chrome();
    $capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
    

    启用直通

    enablePassThrough 模式在Selenium Client v3.5.0 中首次引入。 enablePassThrough 允许从测试的 RemoteWebDriver 连接,通过 Grid Hub,连接到 Grid 节点,再连接到 DriverService,然后连接到浏览器以使用相同的 WebDriver 协议(Json Wire 协议或 W3C一)端到端没有翻译。

    enablePassThrough 模式可以通过使用参数 -enablePassThrough false 启动独立服务器或网格节点来禁用

    随着Selenium Client v3.9.0 的发布和可用性,所有HTTP 通信 都切换到OkHttp。尽管您仍然可以通过将webdriver.http.factory 系统属性设置为apache 来将版本更改回Apache HttpClient。

    同时不再支持服务器的passthrough模式

    在这里你可以找到关于enablePassThrough not available for selenium server 3.9.1的详细讨论

    【讨论】:

    • 您能否提供更多详细信息?在$options = new ChromeOptions(); 我得到:Message: Class 'ChromeOptions' not found。如果我这样做:$options = \Facebook\WebDriver\Remote\DesiredCapabilities::chrome(); $options->addArguments(array('--no-sandbox')); 我会收到消息,Call to undefined method Facebook\WebDriver\Remote\DesiredCapabilities::addArguments()
    • @VikR 老实说,我并不经常使用 facebook-php-driver,但我提供了每个主题的超链接供您参考。如果您正在寻找更多文档,请告诉我。
    • 我昨天确实看到了SetCapability 文档的链接。它有你记下的代码,但在我的系统上抛出了我看到的错误。所以我仍然需要一个关于如何做到这一点的答案。同时,我赞成你的回应。感谢您提供这么好的信息!
    • @VikR 您能否在主要问题中添加您的观察结果,以便我可以准确查找您要查找的内容?
    • 感谢@DebanjanB 的提问以及您之前发布的重要信息!我找到了正确的语法并将其发布在下面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多