Selenium RC WaitForPageToLoad зависает - PullRequest
       14

Selenium RC WaitForPageToLoad зависает

1 голос
/ 06 сентября 2010

Я пытаюсь запустить 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 не осознает, что страница уже загружена.

Ответы [ 4 ]

5 голосов
/ 07 сентября 2010

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

1 голос
/ 28 июня 2011

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

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

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

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

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

0 голосов
/ 14 ноября 2011

Оповещение «WaitForPageToLoad ()» - ожидание присутствия элемента.


    $SECONDS = 360;</p>

<pre><code>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, но вы можете указать абсолютную цель.

0 голосов
/ 09 ноября 2011

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

...