Python,Selenium - 处理多个等待条件

时间:2015-11-11 11:48:55

标签: python selenium selenium-webdriver

我有一个名为webdriver.py的文件,它实现了selenium.webdriver库中的方法。有一个等待函数处理我需要的大多数情况:

def wait_for(self, func, target=None, timeout=None, **kwargs):
    timeout = timeout or self.timeout
    try:
        return WebDriverWait(self, timeout).until(func)
    except TimeoutException:
        if not target:
            raise WebDriverException('Wait for: "%s" failed!' % inspect.getsource(func).strip())
        raise NoSuchElementException(target)

func是选择器。

问题是有时DOM元素是不可见的,导致异常和测试失败。所以我想扩展wait_for以等待元素变得可见。

这样的东西
def wait_for(self, func, target=None, timeout=None, **kwargs):
    timeout = timeout or self.timeout
    try:
        return WebDriverWait(self, timeout).until(EC.element_to_be_clickable(func)).until(func)
    except TimeoutException:
        if not target:
            raise WebDriverException('Wait for: "%s" failed!' % inspect.getsource(func).strip())
        raise NoSuchElementException(target)

ECselenium.driver.expected_conditions

这当然不起作用 - 不支持until().until()语法..或者其他事情发生,例如EC不存在。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用EC.presence_of_element_located将DOM中的元素等待显示,而不需要第二个.until

def wait_for(self, func, target=None, timeout=self.timeout):
    try:
        WebDriverWait(self, timeout).until(EC.presence_of_element_located((By.CSS_SELECTOR, func)))
    except TimeoutException:
        if not target:
            raise WebDriverException('Wait for: "%s" failed!' % inspect.getsource(func).strip())
        raise NoSuchElementException(target)