djo*_*dal 7 java selenium-webdriver
点击带有FirefoxDriver的Selenium 2.0b3 Java API的按钮时出现问题.单击该按钮会将表单发送到Web服务器,然后由于表单提交,浏览器将转到新页面.
当使用element.click()单击元素时,selenium正在等待浏览器完成其操作.浏览器等待页面加载完成.但是,由于某些广告请求,有时页面加载会花费大量时间.
如何解决element.click()和页面加载之间的同步问题?
编辑:
正如WebElement javadoc中所解释的那样:
单击此元素.如果这导致加载新页面,则此方法将阻止,直到页面加载为止.
谢谢
driver.get() 实际上应该阻塞,直到页面加载完成。然而有时它不会,例如如果 JavaScript 在主 HTML 加载后继续加载。在这种情况下,您有时会在单击尚未出现的元素时遇到问题。您可以使用 WebDriverWait() 等待元素出现或通过以下方式增加隐式等待时间:
driver.manage().timeouts().implicitlyWait(X, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)
这是使用 WebDriverWait 的等效内容:
public void waitAndClick(WebDriver driver, By by) {
WebDriverWait wait = new WebDriverWait(driver, 10000);
Function<WebDriver, Boolean> waitForElement = new waitForElement(by);
wait.until(waitForElement);
Actions builder = new Actions(driver);
builder.click(driver.findElement(by)).perform();
}
Run Code Online (Sandbox Code Playgroud)
还有 waitForElement 类:
public class waitForElement implements Function<WebDriver, Boolean> {
private final By by;
private String text = null;
public waitForElement(By by) {
this.by = by;
}
public waitForElement(By by, String text) {
this.by = by;
this.text = text;
}
@Override
public Boolean apply(WebDriver from) {
if (this.text != null) {
for (WebElement e : from.findElements(this.by)) {
if (e.getText().equals(this.text)) {
return Boolean.TRUE;
}
}
return Boolean.FALSE;
} else {
try {
from.findElement(this.by);
} catch (Exception e) {
return Boolean.FALSE;
}
return Boolean.TRUE;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2444 次 |
| 最近记录: |