Как дождаться, пока элемент будет содержать атрибут style = "display: none;" используя Selenium и Python - PullRequest
1 голос
/ 28 мая 2020

При использовании Selenium / Python мне нужно подождать / приостановить, пока: style="display:none;" не отобразится для <div id="notification"..</div>


После нажатия кнопки отобразится следующее ( Загрузка .. .)

<div id="notification" class="notification_info" style="opacity: 1; display: inline-block;">Loading...</div>

Затем, после того, как набор данных загружен на веб-страницу, Загрузка ... уходит ( изменяя display:none), и присутствует следующее:

<div id="notification" class="notification_info" style="display: none;">Loading...</div>


Как это сделать (чтобы проверить или дождаться значения style="display: none;")?

Поскольку на странице много <divs> с style=display, мне нужно подождать как id из div, так и style display.

1 Ответ

2 голосов
/ 29 мая 2020

Как только вы нажмете нужную кнопку, станет видимым элемент с текстом Loading.... Следовательно, вы видите элемент в HTML DOM как:

<div id="notification" class="notification_info" style="opacity: 1; display: inline-block;">Loading...</div>

После завершения загрузки элемент с текстом Loading... становится невидимым путем изменения display атрибут style как:

style="display: none;"

Следовательно, WebElement представлен в DOM Tree как:

<div id="notification" class="notification_info" style="display: none;">Loading...</div>

Решение

Использование Selenium , чтобы дождаться, пока элемент с текстом Loading... не превратится в style="display: none;" вам нужно чтобы вызвать WebDriverWait для invisibility_of_element(), и вы можете использовать любую из следующих Стратегий локатора :

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.invisibility_of_element((By.CSS_SELECTOR, "div.notification_info#notification")))
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.invisibility_of_element_located((By.XPATH, "//div[@class='notification_info' and @id='notification']")))
    
  • Примечание : необходимо добавить следующие импортированные данные:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

Ссылка

Вы можете найти пару соответствующих подробных обсуждений в:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...