我在带有 JDK7 和 JRE7 的 windows7 机器上使用 Webdriver(没有 IEDriver 实现)2.23 API。测试脚本按预期工作正常,但是当我引入 IEDriver 时,脚本在页面中失败,无法单击元素错误消息,因为相应的元素不可见。我已经仔细检查了我的定位器申请。在没有 IEDriver 实现的情况下也可以单击相同的内容。我尝试过模拟所有点击类型,包括 Action 类的上下文点击。没用。所有点击类型都返回相同的结果。有什么帮助吗?
问问题
240 次
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)
.
希望能帮助到你 ;)
更新实际上,使用这些组件我从未遇到过类似的问题:
selenium-server-standalone
版本 2.32.0- 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 回答