Selenium Firefox打开超时

时间:2010-06-28 17:06:17

标签: firefox selenium

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

当它工作时,此代码执行得非常快,页面加载时间为.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 个答案:

答案 0 :(得分:2)

我有一个类似的设置(Firefox 3.6.15,Selenium RC 1.0.1,但在WinXP上并使用Python库)并且我正在使用几个站点 - 一个站点在正常使用中自然容易超时(例如,由人类用户)而其他人通常不是。那些看起来不那么慢但容易超时的那个在通过RC运行时显然比一个人慢得多 - 它不会总是超时但是发生率更常见。

我对此的有限心理模型是,不知何故RC正在做的额外步骤(与浏览器通信,检查它在返回的页面中看到的内容等等)以某种方式向页面加载的每一步添加一点,然后在有一点他们会把它推到边缘。显然这是过分简化的,我没有时间进行适当的调查。

此外,我确实倾向于注意到问题会随着时间的推移而变得更糟,这与OP看到的情况相符(即第一次工作但不会在3-5次尝试之后工作)。通常重启似乎可以解决问题,但如果没有经过适当的调查,我无法分辨为什么这会有所帮助,也许它会以某种方式释放内存(机器用于其他事情),分配给我们公司的另一个代理或我没有考虑的其他事情。

所以...在这里没有多少完整的答案(评论会更合适,但我的登录还不能),但至少它强化了你不是唯一的。定期重启是一件烦人的事情,但是如果没有更聪明的分析和答案,也许他们值得一试?

答案 1 :(得分:2)

我遇到了同样的问题。这是因为DefaultSelenium的open方法超时为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);
        }

答案 2 :(得分:1)

我已经解决了使用:

selenium.setTimeout("60000");

开放指导之前。