Selenium Firefox Открытое время ожидания - PullRequest
5 голосов
/ 28 июня 2010

Использование Windows 2008, C #, Firefox 3.5.1, Selenium RC (v1.0.1)

Когда он работает, этот код выполняется очень быстро, и страница загружается в течение 0,5 секунд.

Однако, сессия всегда, кажется, терпит неудачу после 3 - 5 итераций. Команда open приведет к появлению окна, но не к загрузке страницы. В конце концов, исключение тайм-аута возвращается. Срок действия страницы не истек. Вместо этого запрос на URL никогда не доходил до окна браузера.

class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                var s = new DefaultSelenium("localhost", 4444, "firefox", "http://my.server");
                s.Start();
                s.SetSpeed("300");
                s.Open("/");
                s.WaitForPageToLoad("30000");
                s.Type("//input[contains(@id, '_username')]", "my.test");
                s.Type("//input[contains(@id, '_password')]", "password");
                s.Stop();

            }
        }
    }

Ответы [ 3 ]

2 голосов
/ 31 марта 2011

Я столкнулся с той же проблемой. Это потому, что метод openSelenium имеет время ожидания 30000 мс, поэтому он ожидает загрузки вашей страницы в течение 30 с. Вы можете попробовать это тривиальное решение.

//selenium is DefaultSelenium instance as private member of the class

            boolean serverStartTry = false;
        int tryCount =1;

        while((!serverStartTry) && tryCount <= Constants.maxServerTries){
            try{
                this.selenium.open(ReadConFile.readcoFile("pageName"));
                System.out.println("Server started in try no: "+tryCount);
                serverStartTry =true;
            }catch (SeleniumException e) {
                System.out.println("Server start try no: "+tryCount );
                System.out.println("Server Start Try: "+ serverStartTry);
                serverStartTry = false;
                tryCount++;
            }
        }
        if(!serverStartTry){
            System.out.println("Server Not started, no. of attempts made: "+tryCount);
            System.exit(0);
        }
2 голосов
/ 11 марта 2011

У меня есть аналогичная настройка (Firefox 3.6.15, Selenium RC 1.0.1, но на WinXP и с использованием библиотек Python), и я работаю с парой сайтов - один сайт естественным образом подвержен тайм-аутам при обычном использовании (например, пользователем), тогда как другие, как правило, нет. Те, которые не выглядят немного медленнее, но те, которые подвержены тайм-аутам, значительно медленнее при запуске через RC, чем человек - это не всегда будет тайм-аут, но частота встречается гораздо чаще.

Моя ограниченная ментальная модель для этого заключается в том, что каким-то образом дополнительные шаги, которые выполняет RC (общение с браузером, проверка того, что он видит на возвращаемых страницах и т. Д. И т. Д.), Каким-то образом добавляют немного к каждому шагу загрузки страницы, а затем в какой-то момент они будут толкать его через край. Очевидно, это слишком упрощено, у меня просто не было времени, чтобы должным образом расследовать.

Кроме того, я склонен замечать, что со временем проблема усугубляется, что немного согласуется с тем, что видел ОП (т.е. работает в первый раз, но не после 3–5 попыток). Часто кажется, что перезагрузка решает проблемы, но без надлежащего расследования я не могу сказать, почему это помогает, возможно, это как-то освобождает память (машина используется для других целей), выделяется другому прокси-серверу нашей компании или что-то еще, что я не учел.

Так что ... не полный ответ здесь (комментарий был бы более уместным, но мой логин еще не смог), но, по крайней мере, это подтверждает, что вы не единственный. Периодические перезапуски - раздражающая вещь, которую нужно делать, но в отсутствие какого-либо более разумного анализа и ответов, может быть, они того стоили бы?

1 голос
/ 10 ноября 2011

Я решил использовать:

selenium.setTimeout("60000");

до открытой инструкции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...