用于检查元素是否存在的Python Selenium Webdriver需要时间

时间:2012-10-09 05:33:38

标签: python selenium selenium-webdriver xpath

尝试在几次GUI操作后验证某些按钮不存在(预计不存在)。我使用的是find_element_by_xpath(),但速度非常慢。超时的任何解决方案?

2 个答案:

答案 0 :(得分:7)

实际上,如果找不到指定的元素,WebDriver的find_element方法将等待元素的隐式时间。

WebDriver中没有像isElementPresent()那样的预定义方法来检查。你应该为此编写自己的逻辑。

<强>逻辑

public boolean isElementPresent()
{
   try
   {
      set_the_implicit time to zero
      find_element_by_xpath()
      set_the_implicit time to your default time (say 30 sec)
      return true;
   }
   catch(Exception e)
   {
       return false;
   }
}

请参阅:http://goo.gl/6PLBw

答案 1 :(得分:0)

如果您要检查元素是否不存在,最简单的方法是使用with语句。

从selenium.common.exceptions

导入NoSuchElementException

def test_element_does_not_exist(self):
    with self.assertRaises(NoSuchElementException):
        browser.find_element_by_xpath()

就超时而言,我喜欢"Obey The Testing Goat"中的那个。

# Set to however long you want to wait.
MAX_WAIT = 5

def wait(fn):  
    def modified_fn(*args, **kwargs):  
        start_time = time.time()
        while True:  
            try:
                return fn(*args, **kwargs)  
            except (AssertionError, WebDriverException) as e:  
                if time.time() - start_time > MAX_WAIT:
                    raise e
            time.sleep(0.5)
    return modified_fn


@wait
def wait_for(self, fn):
    return fn()

# Usage - Times out if element is not found after MAX_WAIT.
self.wait_for(lambda: browser.find_element_by_id())