2017-02-16 24 views
1

Я пытаюсь проверить форму входа в систему с помощью селена, где пользователи должны ввести SMS-код в форму для проверки. Я использую facebook/php-webdriver Therefor я впрыснуть следующий JavaScript в сайте:executeScript - ввести приглашение и вернуть значение - Не удалось найти поле значения

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

Это, как я пытаюсь поймать значение подсказки:

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

Согласно documentation, executeScript возвращает возвращение сценария стоимость.

Теперь после этого я хочу, чтобы отправить этот код в поле ввода:

$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(); 
+0

Я не получил, как вы можете получить код с помощью этого '$ smsCode = $ this-> driver-> executeScript (« return prompt («Введите код подтверждения SMS»., ''); ");' Это просто открытие всплывающего окна «alert» на browswer, и он не возвращает код sms. –

+0

Он не запускает 'alert', он запускает' приглашение' и возвращает пользовательский ввод, который затем будет доступен в '$ smsCode' – Black

+0

. Я имел в виду, почему вы не входите непосредственно в smscode в' login_field', а не получаете это по подсказке. В любом случае вы должны создать smscode вручную? как вы производите smscode? –

ответ

2

это, как представляется, проблема в Geckodriver, реализация Селена в Firefox - см https://github.com/mozilla/geckodriver/issues/431.

В настоящее время вы можете попробовать либо:

  • последнюю Firefox (ночной вариант), где проблема может быть фиксированной,
  • или использовать Firefox 47.0.1 (или Firefox ESR версии) вместе с сервером Selenium 2.53.1,
  • или использовать другой браузер, например Chrome и Chromedriver.
+0

Знаете ли вы, как я могу передать Chromedriver на мой сервер селена? Я смог передать Geckodriver на сервер, запустив его так: 'start java -Dwebdriver.gecko.driver =" C: \ GeckoDriver \ geckodriver.exe "-jar selenium-server-standalone-3.0.1.jar', но как это работает с ChromeDriver? Мне нужно изменить 'gecko' на' chrome'? – Black

+0

Я только что попробовал его с Chromedriver, также получаю сообщение об ошибке, но другое. Предупреждение: неверный аргумент, предоставленный foreach() в C: \ xampp \ htdocs \ teschd \ vendor \ facebook \ webdriver \ lib \ WebDriverKeys.php on line 105 ' – Black

+0

Я просто попробовал это с Firefox ESR вместе с Selenium Server 2.53.1. Теперь я получаю 'Fatal error: Uncaught Facebook \ WebDriver \ Exception \ UnexpectedAlertOpenException: Неожиданный модальный диалог (текст: введите код подтверждения SMS.):' – Black

 Смежные вопросы

  • Нет связанных вопросов^_^