我怎么能等到一个元素获得或失去一个类?

时间:2015-06-26 15:20:10

标签: python python-3.x selenium selenium-webdriver

Selenium WebDriver中是否存在等待元素获得或失去类的现有方法?例如,我的s​​elect的HTML如下所示:

<select id="select-1" class="selectBox ui-state-error" row-index="0" tabindex="-1" aria-hidden="true">
...
</select>

相关课程为ui-state-error。这基本上在我的下拉菜单上显示红色突出显示。基本上,我想设置一个显式的等待,直到我的select元素获得类ui-state-error或丢失类ui-state-error

我不确定这是否可能。

Python版本:3.4.3。 Selenium的Python绑定:2.46.0

1 个答案:

答案 0 :(得分:3)

没有内置的方法来实现它。你需要写一个custom Expected Condition

from selenium.webdriver.support import expected_conditions as EC

class wait_for_class(object):
    def __init__(self, locator, class_name):
        self.locator = locator
        self.class_name = class_name

    def __call__(self, driver):
        try:
            element_class = EC._find_element(driver, self.locator).get_attribute('class')
            return element_class and self.class_name in element_class
        except StaleElementReferenceException:
            return False

用法:

wait = WebDriverWait(driver, 10)
wait.until(wait_for_class((By.ID, 'select-1'), "ui-state-error"))

预期的条件是,基本上是callables,这意味着你可以只编写一个函数,但我喜欢在python-selenium内部按照它们的内部类实现。