【问题标题】:Wait until attribute changed等到属性改变
【发布时间】:2019-11-12 16:16:45
【问题描述】:
页面有一个微调器(页面加载时)
<div id="event-wait-msg-main" style="display: block;">
<div id="event-wait-msg"></div>
</div>
页面加载时style属性变为display: none;
在这种情况下如何使用webdriver wait?
【问题讨论】:
标签:
python
selenium
selenium-webdriver
【解决方案1】:
您可以使用WebDriverWait 等到元素不可见:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
wait.until(EC.invisibility_of_element_located((By.ID, "event-wait-msg-main")))
【解决方案2】:
您可以创建自定义预期条件
wait = WebDriverWait(driver, 10)
wait.until(__WaitForAttributeToBe(By.id('event-wait-msg'), 'style', 'display: none;'))
class __WaitForAttributeToBe(object):
def __init__(self, by, attribute, expected_value):
self.__by = by
self.__attribute = attribute
self.__expected_value = expected_value
def __call__(self, driver):
try:
attribute_value = driver.find_element(self.__by).get_attribute(self.__attribute)
return attribute_value == self.__expected_value
except (NoSuchElementException, StaleElementReferenceException):
return False
【解决方案3】:
使用显式等待:
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.xpath, './/div[contains(@style,'none')]')))