Есть ли возможность дождаться исчезновения определенного класса? - PullRequest
0 голосов
/ 23 мая 2019

Я новичок в Selenium и столкнулся с проблемой.Я хочу дождаться исчезновения экрана загрузки в моем приложении.Экран загрузки - это не элемент, а класс, который отображается в элементе html при его отображении.Я видел несколько похожих постов, но все они нацелены на исчезновение элемента.Я просто хочу, чтобы класс элемента был невидимым.

Виден экран загрузки:

<html class="busy">
 ...
</html>

Исчез экран загрузки:

<html>
 ...
</html>

Я собирался сделать этос WebDriverWait, где я использовал ожидаемые условия.Но с моим решением прямо сейчас я увидел, что я буду ждать, пока исчезнет элемент html, а не класс.

wait = new WebDriverWait(driver, 30);

wait.until(ExpectedConditions.invisibilityOfElementLocated(By.className("busy")));

Я хочу выяснить, можно ли и как ждать только класса.исчез, и если это вообще возможно с функцией webdriver wait.until

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Спасибо за комментарии, они помогли найти мое решение.Я обнаружил, что в этом приложении существуют два экрана загрузки.Первый, который появляется только при запуске приложения, и второй, когда элемент html изменяется вместе с классом.

Этот первый экран загрузки является HTML-элементом.Поэтому я просто жду, пока это не станет невидимым:

    WebElement initScreen = driver.findElement(By.className("loading-screen"));
    wait.until(ExpectedConditions.invisibilityOf(initScreen));

, а второй - тот, который я упомянул в своем вопросе, где я смог использовать функцию атрибута:

wait.until(ExpectedConditions.attributeToBe(By.xpath("/html"), "cursor", "auto"));

Большое спасибо за вашу помощь

0 голосов
/ 23 мая 2019

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

public static void waitForBlockUIToDisappear() {
    // This function checks the entire currently-loaded web page for the
    // presence of any web element of the
    // class "blockUI" and loops until there are none. The presence of an
    // element with this class does exactly
    // what it implies: it blocks user input. If you get the error that a
    // different web element would receive
    // the click, for example, this is why and you'd need to call this
    // method before doing a click. Generally,
    // this function should be implemented before sending any input to a web
    // page - click, sendkeys, select...
    String blockUI = "//*[contains(@class,'blockUI')]";
    while (true) {
        if (driver.findElements(By.xpath(blockUI)).size() == 0)
            break;
    }
    ;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...