2010-06-28 17 views
5

Korzystanie Windows 2008, C#, Firefox 3.5.1, selen RC (v1.0.1)Selen Firefox Otwórz Timeout

Kiedy działa ten kod wykonywany bardzo szybko i strona ładuje się w ciągu .5 sekund.

Jednak sesja zawsze kończy się niepowodzeniem po 3 - 5 iteracjach. Komenda otwarcia spowoduje odrodzenie okna, ale brak strony do załadowania. W końcu zwracany jest wyjątek timeout. Przekroczono limit czasu strony. Zamiast tego wygląda na to, że żądanie adresu URL nigdy nie dotarło do okna przeglądarki.

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(); 

      } 
     } 
    } 

Odpowiedz

2

mam podobny zestaw w górę (Firefox 3.6.15, selen RC 1.0.1, ale na WinXP i korzystania z biblioteki Python) i pracuję z kilku stron - jedna strona jest naturalnie podatne na limity czasu w normalnym użytkowaniu (np. przez użytkownika), podczas gdy inne zazwyczaj nie. Te, które nie pojawiają się nieco wolniej, ale te, które są podatne na przekroczenie limitu czasu, są znacznie wolniejsze, gdy są uruchamiane przez RC niż przez osobę - nie zawsze będzie to miało limit czasu, ale częstotliwość występowania jest o wiele większa.

Moim ograniczonym modelem mentalnym jest to, że w jakiś sposób dodatkowe kroki wykonywane przez RC (komunikacja z przeglądarką, sprawdzanie, co widzi na zwróconych stronach itp. Itd.) Dodają trochę do każdego kroku ładowanej strony, a następnie w pewnym momencie przepchną go przez krawędź. Oczywiście jest to nadmiernie uproszczone, po prostu nie miałem czasu na dokładne zbadanie sprawy.

Ponadto, zauważam, że problem z czasem się pogarsza, co w niewielkim stopniu pasuje do tego, co zaobserwował PO (tj. Po raz pierwszy, ale nie po 3-5 próbach). Często zdarza się, że restart powoduje naprawę problemów, ale bez odpowiedniego dochodzenia nie mogę stwierdzić, dlaczego to pomaga, może to w jakiś sposób zwalnia pamięć (maszyna jest używana do innych rzeczy), przydzielanie jej do jednego z serwerów proxy naszej firmy lub coś innego, o czym nie pomyślałem.

Więc ... nie ma tu pełnej odpowiedzi (komentarz byłby bardziej odpowiedni, ale mój login nie jest jeszcze w stanie), ale przynajmniej wzmacnia to, że nie jesteś jedyny. Okresowe ponowne uruchamianie jest irytujące, co trzeba zrobić, ale w przypadku braku mądrzejszej analizy i odpowiedzi, być może warto byłoby spróbować?

+0

Korzystaliśmy z nowej instancji Selenium, a tym samym instancji przeglądarki dla każdego testu ... nie jest cool. – Blundell

2

Miałem do czynienia z tym samym problemem. To dlatego, że otwarta metoda DefaultSelenium ma limit czasu wynoszący 30000ms, więc czeka na 30s, aby załadować stronę. Możesz spróbować tego trywialnego rozwiązania.

//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); 
     } 
1

I został rozwiązany przy użyciu:

selenium.setTimeout("60000"); 

przed otwartym instrukcji.