在Selenium RC中加载FireFox和IE中的页面

时间:2010-05-25 09:43:54

标签: firefox selenium selenium-rc

我在Selenium RC遇到了一个奇怪的问题。当我使用IE7时,测试工作正常。但是,如果我使用firefox 3.5,Selenium会在完全加载之前获取页面。使用线程睡眠解决了这个问题。

IE和FireFox中处理页面加载标志的方式有何区别?

selenium.setTimeout(Timeout);
selenium.open("http://localhost");
selenium.waitForPageToLoad(Timeout);
selenium.windowMaximize();
selenium.windowFocus();
Thread.sleep(60000);
selenium.type("//html/body/table/tbody/tr[2]/td/div/form/table/tbody/tr[1]/td/table/tbody/tr[3]/td[2]/input","test");   
selenium.type("pwd","test");   
selenium.click("submit");
selenium.waitForPageToLoad(Timeout);        
Thread.sleep(60000);
System.out.println(selenium.getLocation());
System.out.println(selenium.getHtmlSource());
String[] ro=selenium.getAllLinks();
System.out.println("-----"+ro.length);

在IE7中,一切都适用于thread.sleep,而不是FireFox。

1 个答案:

答案 0 :(得分:3)

在发送Selenium命令之前,可能是在页面加载时运行的任何JavaScript都没有完成。例如,如果您尝试输入的输入最初被禁用,那么Selenium可能会在启用它的JavaScript完成之前尝试输入它。

如果是这种情况,您可以尝试在测试中添加适当的waitForCondition命令,这将在条件满足后不断重新评估并继续,这比任意睡眠要好得多。

以下示例将等待元素启用:

selenium.waitForCondition("var value = selenium.isEditable('id=myElement'); value == true", "60000");

我还建议您查看定位器,因为它目前是一个非常脆弱的XPath,只是对您的Web应用程序的HTML源稍有改动可能会破坏您的测试。尝试查找id属性并创建相对于该属性的xpath。

例如,如果您的决赛桌有id myTable,您可以使用:

xpath=id('myTable')//tr[3]/td[2]/input