0

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

4

2 回答 2

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
于 2013-07-18T16:11:31.950 回答
0

最后,在以下代码的帮助下,我设法单击了上述元素。

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

真正的来源在这里。这可能对某人有帮助。

于 2013-07-17T11:22:57.623 回答