我们希望将测试移至selenium 2,我发现了一个我不知道如何解决它的问题。
我对webdriver使用以下命令:
WebDriver driver = new InternetExplorerDriver();
driver.navigate().to("webapp");
Thread.sleep(3000);
System.out.println(driver.getPageSource());
WebElement element = driver.findElement(By.id("someid"));
在最后一行引发异常并且未找到任何元素。 同样的例子在firefox中运行良好,但是我们需要它在IE中使用它。 我试图增加更多的睡眠,但它没有帮助。 getPageSource方法返回正确的html。
我还尝试使用以下命令获取body标签,但它返回null。
List<WebElement> list = driver.findElements(By.tagName("body"));
我们的网络应用程序是在gwt中创建的。
你知道什么可能导致硒没有看到任何元素吗?
答案 0 :(得分:1)
您发布的代码绝对没有问题。
确保使用一些较新的Selenium版本,而不是一些旧的alpha / beta版本。您使用哪种IE浏览器,它是否有任何特殊的附加组件?它适用于这样的一些最小网页吗?
<html>
<input id='myId' />
</html>
您是否尝试过搜索其他元素?通过其他一些技术,如xpath或css选择器?你的资本化是绝对正确的吗?如果您保存页面的html并尝试使用所述测试用例在本地加载,它是否有效?你能提供一个最小的测试用例吗?作为一种不太可能工作的最后解决方案,您可以尝试回退到Selenium 1,获得两行代码,以帮助在极少数情况下等待:
Selenium sele = new WebDriverBackedSelenium(driver, "webapp");
sele.waitForPageToLoad("10000");
答案 1 :(得分:1)
在制作作业声明之前,请尝试使用智能等待。您只需要传入当前的WebDriver对象和超时值。
new WebDriverWait(driver, timeOutInSeconds).until(new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(final WebDriver theDriver) {
return Boolean.valueOf(theDriver.findElements(By.id(elementId)).size() > 0);
}
});
答案 2 :(得分:0)
也许你可以尝试添加
driver.switchTo().window(driver.getWindowHandle());
在搜索元素之前。当Webdriver在不同服务器上的页面之间移动时(不是使用IE而是使用Firefox),我遇到了这个问题。