У меня всегда возникает проблема при написании тестов Selenium, когда попытка щелкнуть по элементу, который не готов, может привести к исключению StaleElementReference / ElementClickIntercepted. Это позволило сделать тесты нестабильными, сделав тесты неудачными там, где они были успешными, если я просто подожду 2 секунды, чтобы элемент стал активным для клика. для появления элемента в течение примерно 2 секунд, прежде чем я считаю его отсутствующим, и я пытался создать функцию clickElement()
, которая окружает функцию basi c click()
для выполнения той же цели.
Его цель - продолжать пытаться нажимать с шагом 100 мсек, пока это не удастся. Я делаю это, перехватывая исключения и увеличивая счетчик для каждого клика, и выбрасываю из l oop только когда элемент нажат или слишком много попыток щелкнуть вызвали исключения.
Это функция I писал (а):
public void clickElement(WebElement element) {
int maxTimeOut = 50;
int timeOutCt = 0;
boolean isTimedOut = false;
System.out.println("=> Try to click on <" + element.getTagName() + ">");
while ( !isTimedOut ) {
try {
element.click();
isTimedOut = true; // could click
System.out.println("\n OK \n");
} catch (Exception e) {
waitSeconds(0.1);
timeOutCt++;
System.out.println(" \t => Error while attempting to click for the " + timeOutCt +"nd time \n");
if ( timeOutCt > maxTimeOut ) {
isTimedOut = true;
fail("Element <" + element.getTagName() + "> is not clickable. See exception: " + e);
}
}
}
}
waitSeconds:
public void waitSeconds(double t) {
long mT = (long) (t * 1000);
try {
System.out.print("\n \t \t ( ) Sleep de " + mT + "secondes");
Thread.sleep(mT);
System.out.print(" ... Done \n ");
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
Проблема, с которой я столкнулся, заключается в том, что выполнение этого, по-видимому, занимает абсурдно много времени, по крайней мере, дольше миллисекунды, по крайней мере, я могу сказать, что это длится более секунды. Я подумал, что, возможно, моя waitSeconds()
функция не работает должным образом, но я протестировал ее в простой программе, и она работает как следует: waitSeconds(0.1)
приводит к ожиданию 100 мс.
Так почему же это когда clickElement
вызывается, и он пытается нажать на элемент несколько раз, это может занять до двух секунд между двумя попытками?
Это замедляет вывод на консоль?
Или это что-то типа «попробуй / поймай», что все испортило?