Как дождаться загрузки загрузчика внутри кнопки для завершения загрузки? - PullRequest
1 голос
/ 03 мая 2019

Мне нужно дождаться завершения загрузки конкретного загрузчика после нажатия кнопки, пожалуйста, взгляните на следующее изображение ниже: enter image description here

Как вы можете видетькак показано на рисунке выше, после нажатия кнопки внутри кнопки появляется загрузчик ajax.

Я создал следующий селектор для определения местоположения кнопки:

//form[contains(@id, 'messageform')]//button/span

В настоящее время принятие запроса (нажатие на кнопку) не проходит мой тестовый сценарий, поскольку сценарий переходит к следующим шагам теста безожидая завершения загрузки.

Я попробовал следующее и больше, но безуспешно:

  • Внедрение JS для ожидания полной загрузки страницы.

    ExpectedCondition<Boolean> expectation = driver -> ((JavascriptExecutor) driver).executeScript("return document.readyState").toString().equals("complete");
    
  • ExpectedConditions.invisibilityOf (element)

    WebDriver driver = getDriver();
    
    WebDriverWait exists = new WebDriverWait(driver, timer);
    exists.until(ExpectedConditions.refreshed(
            ExpectedConditions.invisibilityOf(element)));
    

Есть идеи?

1 Ответ

1 голос
/ 03 мая 2019

Вы должны использовать .stalenessOf(), чтобы подождать, пока элемент больше не будет присоединен к DOM.

Примерно так (настроить ваш случай):

WebElement somePageElement = driver.findElement(By.id("someId"));
WebDriverWait wait = new WebDriverWait(webDriver, 10);
// do something that changes state of somePageElement
wait.until(ExpectedConditions.stalenessOf(somePageElement));

И хорошодело в том, что вам не нужно обрабатывать какие-либо исключения.

Кроме того, вы также можете создать метод и обрабатывать исключения следующим образом:

public static void WaitForCommission (WebDriver driver) throws Exception {
    for (int second = 0; second++) {
        if (second >= 30) fail("timeout");
        try { 
            if (IsElementActive(By.id("someElementID"), driver)) 
                break; 
            } catch (Exception e) {}
        Thread.sleep(1000);
    }
}

private static boolean IsElementActive(By id, WebDriver driver) {
    WebElement we =  driver.findElement(id);        
    if(we.isEnabled())
        return true;
    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...