Я использую PHPUnit с расширением Selenium2.
Я открываю всплывающее окно, ввожу данные и нажимаю кнопку отправки — после этого всплывающее окно закрывается.
Позже я переключаюсь обратно в главное окно — все это работает без нареканий. Но после обратного переключения никакие другие шаги моих тестов не выполняются, и тест завершается неудачно со следующим сообщением об ошибке:
PHPUnit_Extensions_Selenium2TestCase_NoSeleniumException: Error connection[28] to http://localhost:4444/wd/hub/session/d6977d2b-76ac-4754-9a08-5119413b0965/element/4/submit: Operation timed out after 60004 milliseconds with 0 bytes received
Для полноты кода:
$windowHandles = $this->windowHandles();
$this->window($windowHandles[1]);
$this->byCssSelector('input[id=email]')->value($fbUsername);
$this->byCssSelector('input[id=pass]')->value($fbPassword);
$this->byCssSelector('input[id=u_0_1]')->submit();
$this->window($windowHandles[0]);
Я пропустил какой-то необходимый шаг? Должен ли я чего-то ждать? Любые указатели помогут.
@akluth, ошибка была обнаружением и будет исправлена. Вы можете увидеть больше информации Вот. Я жду новый релиз.
я не PHP
парень, но я надеюсь, что следующий код даст вам некоторые идеи, как справиться с этим. Примечание: следующий код C #
//You probably missing this the concept of handling current and original handle
string currentHandle = driver.CurrentWindowHandle;
ReadOnlyCollection<string> originalHandles = driver.WindowHandles;
// Cause the pop-up to appear
driver.FindElement(By.XPath("//*[@id='webtraffic_popup_start_button']")).Click();
// WebDriverWait.Until<T> waits until the delegate returns
// a non-null value for object types. We can leverage this
// behaviour to return the pop-up window handle.
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
string popupWindowHandle = wait.Until<string>((d) =>
{
string foundHandle = null;
// Subtract out the list of known handles. In the case of a single
// pop-up, the newHandles list will only have one value.
List<string> newHandles = driver.CurrentWindowHandles.Except(originalHandles).ToList();
if (newHandles.Count > 0)
{
foundHandle = newHandles[0];
}
return foundHandle;
});
driver.SwitchTo().Window(popupWindowHandle);
// Do whatever you need to on the pop-up browser, then...
driver.Close();
driver.SwitchToWindow(currentHandle);
Как вы сказали, все работает без нареканий. Но после переключения не выполняются другие этапы моих тестов, и тест не проходит
потому что у вас не правильно переключиться обратно на оригинальный дескриптор окна.
Этот код скопирован с Вот
Спасибо @JimEvans за объяснение этого процесса.
Похоже, ваш браузер обновлен. Вы должны обновить ваши библиотеки селена соответственно.