Selenium 不会等待 AJAX 加载。它会自动等待页面加载。要等待 AJAX 类型加载,您必须使用隐式和显式等待。
您可以使用隐式等待和显式等待来等待特定的 Web 元素,直到它出现在页面中。您可以定义的等待期取决于应用程序。
显式等待:
显式等待是您定义的代码,用于等待特定条件发生,然后再继续执行代码。如果条件达到,它将终止等待并继续执行进一步的步骤。
代码:
WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(strEdit)));
或者
WebElement myDynamicElement = (new WebDriverWait(driver, 30))
.until(new ExpectedCondition<WebElement>(){
@Override
public WebElement apply(WebDriver d) {
return d.findElement(By.id("myDynamicElement"));
}});
这会在抛出 TimeoutException 之前等待最多 30 秒,或者如果它发现元素将在 0 - 30 秒内返回它。默认情况下,WebDriverWait 每 500 毫秒调用一次 ExpectedCondition,直到它成功返回。对于 ExpectedCondition 类型的成功返回是 Boolean 返回 true 或所有其他 ExpectedCondition 类型的非空返回值。
您可以根据应用程序的需要使用 ExpectedConditions 类。
隐式等待:
隐式等待是告诉 WebDriver 在尝试查找一个或多个元素时轮询 DOM 一段时间(如果它们不是立即可用的)
代码:
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
要记住的一件事是,一旦设置了隐式等待 - 它将在 WebDriver 对象实例的生命周期内保持不变
有关更多信息,请使用此链接http://seleniumhq.org/docs/04_webdriver_advanced.jsp
You can use these waits during your AJAX loading.
我希望这会有所帮助。