Selenium RC WaitForPageToLoad Hangs

Я пытаюсь запустить Selenium RC для выполнения автоматических тестов на моем веб-сайте. Я нахожу, что постоянно хочу проверить, что у меня не было никаких функций, и ручное тестирование начинает становиться утомительным.

Тем не менее, я не могу заставить Selenium RC работать с WaitForPageToLoad.

Я попытался скопировать основной пример, который они дают в документации на селен, но тест всегда застревает в: $ this-> waitForPageToLoad («30000»); Я вижу, что он так далеко выходит в появившемся окне и что страница выглядит правильно загруженной (мы находимся на странице результатов поиска Google). Но тест терпит неудачу с тайм-аутом.

require_once 'PHPUnit/Extensions/SeleniumTestCase.php'; /** * Description of Test * * @author brian */ class Test extends PHPUnit_Extensions_SeleniumTestCase { function setUp() { $this->setBrowser("*safari"); $this->setBrowserUrl("http://www.google.com/"); } function testMyTestCase() { $this->open("/"); $this->type("q", "selenium rc"); $this->click("btnG"); $this->waitForPageToLoad("30000"); $this->assertTrue($this->isTextPresent("Results * for selenium rc")); } } 

Еще интереснее то, что если я обновляю страницу, когда она ждет, все будет продолжаться, как ожидалось. Таким образом, похоже, что waitForPageToLoad не понимает, что страница уже загружена.

    Related of "Selenium RC WaitForPageToLoad Hangs"

    Пример в документации Selenium RC устарел. Google изменил способ работы своей домашней страницы совсем недавно, и это уже не простая HTML-страница. Нажатие кнопки поиска теперь представляет собой операцию типа AJAX, которая отправляет запрос поиска и возвращает ответ JSON, который обрабатывается кодом JavaScript на странице. Таким образом, страница никогда не перезагружается, а WaitForPageToLoad () в конечном итоге истекает.

    Есть еще одна возможная причина этой ситуации, с которой я столкнулся сейчас. Согласно документации , если вы вызываете ЛЮБЫЕ КОМАНДЫ waitForPageToLoad между загрузкой страницы и вызовом waitForPageToLoad , тогда возможно, что waitForPageToLoad будет висеть. (Если я правильно понимаю, технически это условие гонки между тестовым сценарием и сервером селена, так что это происходит иногда, не обязательно все время).

    В большинстве случаев загрузка страницы вызвана событием клика. Когда у вас есть тестовый скрипт, например:

     $this->click("/some/path"); // <<- NO SELENIUM COMMANDS HERE $this->waitForPageToLoad("30000"); 

    Убедитесь, что никакие команды селена случайно не вставлены в отмеченную область.

    Хотя это технически не та же проблема, что и OP, она имеет такое же сообщение об ошибке, и я не мог найти эту информацию, не копаясь совсем немного. Надеюсь, это легче найти для других людей в будущем.

    Я наблюдал такую ​​же проблему много раз. Поэтому я не использовал эту команду, когда пользователь не перемещается с текущей страницы. Он зависает время от времени и использует IsElementPresent в цикле while и завершает работу после его возвращения true.

    Атрибут для «WaitForPageToLoad ()« Подождать, пока элемент будет присутствовать.

     $SECONDS = 360; 

    $SECONDS = 360;

     for ($second = 0; ; $second++) { if ($second >= $SECONDS) $this->fail("TIMEOUT"); try { if ($this->isElementPresent("edit-submit")) break; } catch (Exception $e) {} sleep(1); } 

    Этот код будет зацикливаться на 360 секунд, проверяя, присутствует ли значение (edit-submit) каждую секунду. ( "Сон (1)"). По сути, он достигнет того же результата, что и WaitForPageToLoad, но вы можете указать абсолютную цель.