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