【问题标题】: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')]')))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-03
          • 2015-09-22
          • 1970-01-01
          • 2017-10-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多