Здравсвуйте, использую Selenium (Java). Проект активно использует Ajax. Проблема в том, что во многих местах приходится стаить команду Thread.sleep (4000) чтобы все элементы могли загрузиться на страницу. Искал в интернете пример кода чтобы все элементы Ajax загрузились на страницу и только потом выполнять дальнейшие действия. Не могу понять как это работает. Я новичок в Java поэтому сложновато. Аытался использовать вот этот код: `public boolean waitForAjax() {
WebDriverWait wait = new WebDriverWait(driver, 30);
ExpectedCondition<Boolean> jQueryLoad = new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
try {
return ((Long)((JavascriptExecutor)getDriver()).executeScript("return jQuery.active") == 0);
}
catch (Exception e) {
return true;
}
}
};
ExpectedCondition<Boolean> jsLoad = new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
return ((JavascriptExecutor)getDriver()).executeScript("return document.readyState")
.toString().equals("complete");
}
};
return wait.until(jQueryLoad) && wait.until(jsLoad); }`
но ничего не получилось.
Сегодня сделал обходной вариант типа ExpectedConditions, и использую опции InvisibilityOfElementLocated, ElementToBeClickable. Но работает через раз. Хотелось бы пприменить код чтобы ждал полную загрузку Ajax элементов и только после этого выполнялись все действия.
Если кто знает, помогите с кодом. Спасибо!
Согласно документации есть 2 способа ожидания:
1. явный (по событиям, условиям)
WebDriver driver = new FirefoxDriver();
driver.get("http://somedomain/url_that_delays_loading");
WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));
Список условий можно найти тут
2. неявный (ожидания выполнения всех скриптов и загрузок)
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://somedomain/url_that_delays_loading");
WebElement myDynamicElement =
driver.findElement(By.id("myDynamicElement"));
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Всем привет! Необходимо реализовать cron который будет запускать потоки в определенное времяНо время запуска должно задаваться удаленно,...
При старте приложения hibernate почему-то всегда обновляет внешний ключ
Добрый день! Подскажите, как выполнить такой запрос с помощью Hibernate