2010-06-28 40 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"); 

开指令之前。