使用Java在Internet Explorer上运行的WebDriver中“找不到任何元素”异常

时间:2011-07-05 14:31:58

标签: java internet-explorer gwt webdriver selenium-webdriver

我们希望将测试移至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中创建的。

你知道什么可能导致硒没有看到任何元素吗?

3 个答案:

答案 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),我遇到了这个问题。