При работе с елементами сайта возникает необходимость контролировать отрабутку перехода на след. страницу после нажатия на елемент.
Реализовал простенький метод, который сравнивает url до нажатия и после.
public void autoRetryClickOn(WebElement webElement, String webElementName) {
this.driver.manage().timeouts().pageLoadTimeout(25, TimeUnit.SECONDS);
String currentUrl = this.driver.getCurrentUrl();
try {
$(webElement).waitWhile(Condition.not(Condition.present), timeOut);
} catch (Throwable e) { /*NOP*/ }
for(int i = 0; i <= 10; i++){
try {
try {
LOG.info("Trying click on '" + webElementName + "'...");
webElement.click();
} catch (TimeoutException e) {
LOG.warn("Timed out waiting for page load...");
throw e;
}
LOG.info("Click on '" + webElementName + "'");
if (!this.driver.getCurrentUrl().equals(currentUrl)){
driver.manage().timeouts().pageLoadTimeout(120, TimeUnit.SECONDS);
return;
}
LOG.warn("URL didn't change after '" + i + "' click.Trying refresh web-page...");
} catch (Exception e) {
if (!this.driver.getCurrentUrl().equals(currentUrl)){
driver.manage().timeouts().pageLoadTimeout(120, TimeUnit.SECONDS);
return;
}
LOG.warn("URL didn't change after '" + i + "' click.Trying refresh web-page...");
}
waitABit(1000);
LOG.warn("Trying to click again on '"+ webElementName +"'...");
webElement.click();
}
LOG.error("Can't click on '" + webElementName + "' after 10 attempts!");
throw new TameAssertionError("Can't click on '" + webElementName + "'!", this.driver);
}
При запуске теста локально, даже если возникает исключительная ситуация, происходит повторное нажатие на елемент и все корректно отрабатывает. Если тест запускается на Jenkins то все виснет на строчке
LOG.warn("Timed out waiting for page load...");
Второй день бьюсь над проблемой… Просматривал темы по зависаню вебрайвера при нажатии на елемент, в т.ч. решение с помощью JS. Но вопрос в том, что локально то он, вроде, не зависает…
Пробовал обновить selenium до 2.46, на строчке webElement.click() получаю NoClassDefFoundError.
Подскажите, в чем может быть дело…
P.S. FireFox 38.0.1; selenium 2.45