executeScript - 注入提示和返回值 - 无法找到值字段

时间:2017-02-16 08:48:09

标签: javascript php selenium selenium-webdriver webdriver

我尝试使用selenium测试登录表单,用户必须在表单中输入SMS代码进行验证。我正在使用facebook/php-webdriver因此我将以下javascript注入网站:

return prompt('Please enter the SMS verification code.', '');

这是我尝试捕获提示值的方式:

$smsCode = $this->driver->executeScript("return prompt('Please enter the SMS verification code.', '');");

根据documentationexecuteScript返回脚本返回值。

此后我想将此代码发送到输入字段:

$SMSInput->sendKeys($smsCode);
$passwordInput->sendKeys(self::PASSWORD)->submit();

但是,我收到此错误UnknownServerException in WebDriverException.php line 114: Failed to find value field

我也尝试使用executeAsyncScript

我使用的是最新的Selenium Server V 3.0.1。

用于复制的整个测试脚本:

注意:首先安装facebook/php-webdriver,阅读github页面上的安装说明。 然后将以下php代码写入.php文件(例如index.php)并调用url,例如的本地主机/硒/ index.php的

<?php

namespace Facebook\WebDriver;

use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\WebDriverBy;

require("vendor/autoload.php");

$driver = RemoteWebDriver::create('http://localhost:4444/wd/hub', DesiredCapabilities::firefox(), 5000);
$driver->get('https://github.com/login');

$usernameInput = $driver->findElement(
    WebDriverBy::id('login_field')
);
$passwordInput = $driver->findElement(
    WebDriverBy::id('password')
);

$smsCode = $driver->executeScript("return prompt('Please enter the SMS verification code.', '');");

$usernameInput->sendKeys($smsCode);
$passwordInput->sendKeys('1234')->submit();

1 个答案:

答案 0 :(得分:2)

这似乎是Geckodriver中的一个问题,即Firefox中的Selenium实现 - 请参阅https://github.com/mozilla/geckodriver/issues/431

暂时你可以尝试:

  • 最新的Firefox(夜间版本),可以修复
  • 的问题
  • 或将Firefox 47.0.1(或Firefox ESR版本)与Selenium server 2.53.1一起使用,
  • 或使用其他浏览器,例如Chrome和Chromedriver