Как гласит заголовок, я пытаюсь выполнить действие (например, sendkeys или click и т. Д.) Над элементом, но загрузчик (с идентификатором) делает действие несовместимым.
Я пробовал довольно много разных методов, теперь я использую какой-то хитрый метод с использованием спящего потока, который работает полусогласованно, но все равно получает ложные срабатывания для продвижения вперед время от времени, что приводит к провалу теста.
Загрузчик (id = "spinner") исчезает со страницы после завершения вызова API (посылая сигнал сценарию, что это хорошо, чтобы идти вперед), но после запуска следующего вызова загрузчик возвращается, и затем исчезает после завершения (в настоящее время) 3 вызовов API. Я хотел бы найти способ, чтобы это работало независимо от того, сколько вызовов реализовано.
public void Loader()
{
WebDriverWait wait=new WebDriverWait(driver,50);
WebElement CPloader = driver.findElement(By.id("spinner"));
boolean test = wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("spinner")));
if(test==false) {
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("spinner")));
wait.until(ExpectedConditions.invisibilityOf(CPloader));
threadsleep(2000);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("spinner")));
wait.until(ExpectedConditions.invisibilityOf(CPloader));
threadsleep(2000);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("spinner")));
wait.until(ExpectedConditions.invisibilityOf(CPloader));
}
}
В коде тестового сценария я обычно помещаю метод loader, threadsleep, метод loader в попытку удержать его достаточно долго, но я знаю, что это неправильно ... пример ниже:
Util.Loader();
Util.threadsleep(2000);
Util.Loader();
//click element or send keys etc
Я представляю, что это своего рода цикл с ожиданием невидимости, но, похоже, не могу понять это.
Любые указатели в правильном направлении будут очень полезны.