IEDriver实现未通过测试

时间:2013-07-06 14:56:04

标签: selenium-webdriver

我在使用JDK7和JRE7的windows7机器上使用Webdriver(没有IEDriver实现)2.23 API。测试脚本正常工作正常,但是当我介绍IEDriver时,脚本在页面中失败,无法单击元素错误消息,因为相应的元素不可见。我已经用我的定位器申请进行了双重检查。可以通过IEDriver实现单击相同的内容。我试过模拟所有的点击类型,包括Action类的上下文点击。没用所有点击类型都返回相同的结果。有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

最后,我设法在下面的代码的帮助下点击上面说的元素。

WebElement we = driver.findElement(By.name("Complete"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", we); // common for all we

真正的来源是here。这可能对某人有帮助。

答案 1 :(得分:0)

正如你所说,该元素实际上是可见的,并且错误的日志表明它不是,我认为问题可能是由于Internet Explorer的缓慢。您可以使用此方法进行快速测试:

boolean isElementDisplayed(final WebDriver driver, final WebElement element, final int timeoutInSeconds) {
    try {
        ExpectedCondition condition = new ExpectedCondition<Boolean>() {
            @Override
            public Boolean apply(final WebDriver webDriver) {
                return element.isDisplayed();
            }
        };

        Wait w = new WebDriverWait(driver, timeoutInSeconds);
        w.until(condition);
    } catch (Exception ex) {
        //if you get here, it's because the element is not displayed after timeoutInSeconds
        return false;
    }
    return true;
}

像这样使用:

WebElement we = driver.findElement(By.name("Complete"));

if (isElementDisplayed(driver, we, 30)) {
    we.click();
}

这将使驾驶员等待(最多30秒),直到元素我们变得可见,然后驾驶员点击它。 如果它有效,那么我的假设是正确的,你可以改变方法:

 void clickOn(final WebDriver driver, final WebElement element, final int timeoutInSeconds) {
    try {
        ExpectedCondition condition = new ExpectedCondition<Boolean>() {
            @Override
            public Boolean apply(final WebDriver webDriver) {
                element.click();
                return true;
            }
        };

        Wait w = new WebDriverWait(driver, timeoutInSeconds);
        w.until(condition);
    } catch (Exception ex) {
        //probably some kind of exception thrown here
    }
    return;
}

并使用它代替we.click(),例如:

WebElement we = driver.findElement(By.name("Complete"));
clickOn(driver, we, 30);

上面的代码是一个近似值,可让您快速,清晰地检查问题,如果您最终使用它,则应将其调整为您的代码结构。这种实用程序代码永远不会出现在您的测试中。您的测试代码应该是干净的,并且对于所有环境(浏览器,版本,SO等)都是相同的。单独保留变通方法,例如某种util包。

此外,该方法的签名是“超重”。重构你的util代码,你应该能够在你的测试中写下:clickOn(element)

希望它有所帮助;)

更新实际上,使用这些组件我从未遇到过类似的问题:

  1. selenium-server-standalone版本2.32.0
  2. IEDriverServer_x64_2.30.1.exe