2010-05-25 75 views
0

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

页面加载标志如何处理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中。

+0

你的例子有两个睡,如果是去掉其中一个导致Firefox的一个问题?另外,您从Selenium获取什么错误? – 2010-05-25 11:44:04

+0

如果我删除睡眠,硒没有找到FireFox中的元素。没有其他的。 – Rajasankar 2010-05-25 12:13:59

+0

因此,这将是第一次睡眠,然后你会得到一个ElementNotFoundException? – 2010-05-25 12:19:25

回答

3

可能是因为在发送Selenium命令之前,页面加载时运行的任何JavaScript尚未完成。例如,如果您尝试输入的输入最初被禁用,则Selenium可能会尝试在启用它的JavaScript已完成之前键入它。

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

下面的例子会等待一个元素变成启用:

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

我也建议检查您的定位,因为它是目前一个非常脆弱的XPath,只是略有变化到Web应用程序的HTML源代码可能会破坏你的测试。尝试寻找id属性并创建相对于此的xpath。

例如,如果您的决赛桌了的myTable你可以使用一个id

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

可能是JavaScript没有完全加载页面。不过,我想知道,IE和FireFox页面载入标志是否有区别。 – Rajasankar 2010-05-25 12:16:15

+0

我猜想你在IE和Firefox中看到差异的原因是由于IE在通过XPath定位方面速度较慢,给你的页面足够的时间来完成加载。 – 2010-05-25 12:18:21