2010-06-28 66 views
5

使用Windows 2008,C#,Firefox 3.5.1,Selenium RC(v1.0.1)Selenium Firefox Open timeout

當它工作時,此代碼執行速度非常快,頁面在0.5秒內加載。

但是,會話總是在3-5次迭代後失敗。打開命令會導致窗口生成,但不會加載頁面。最終返回超時異常。該頁面實際上沒有超時。相反,它好像對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(); 

      } 
     } 
    } 

回答

2

我有一個類似的設置,(火狐3.6.15,硒RC 1.0.1,但在WinXP和使用Python庫),我與幾個網站的工作 - 一個網站自然是容易正常使用中的超時(例如由用戶使用),而其他人通常不使用。那些沒有出現慢一點的,但是容易超時的那個通過RC運行要比一個人慢得多 - 它不會總是超時,但是發生率要高得多。

我對此的有限心理模型是,RC在做額外的步驟(與瀏覽器通信,檢查它在返回的頁面中看到的內容等等)以某種方式爲頁面加載的每一步添加了一點,然後在某些時候他們會把它推到邊緣。顯然這太簡單了,我沒有時間去適當調查。

此外,我確實傾向於注意隨着時間的推移,問題變得更糟,這與OP見過的內容(即第一次工作但不是3-5次嘗試後)相符。通常情況下,重啓似乎可以解決問題,但如果沒有進行適當的調查,我不知道爲什麼這會有所幫助,也許它會以某種方式釋放內存(機器用於其他事情),分配給我們公司的其他代理服務器或我沒有考慮過的其他事情。

所以......在這裏沒有太多的完整答案(評論本來是比較合適的,但我的登錄還不行),但至少它強化了你並不是唯一的答案。定期重啓是需要做的一件煩人的事情,但是如果沒有更聰明的分析和答案,也許他們會值得一試?

+0

我們使用了一個新的Selenium實例,因此每次測試都使用瀏覽器實例...並不酷。 – Blundell 2011-06-01 15:34:48

2

我正面臨同樣的問題。這是因爲DefaultSelenium的打開方法的超時時間爲30000ms,所以它會等待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); 
     } 
1

我一直在使用解決:

selenium.setTimeout("60000"); 

開指令之前。