在进行web自动化的时候,受页面加载速度影响比较大,常常会报element not found的错误。selenium1.0 中提供了selenium.isElementPresent(Xpath),用于判断xpath是否存在,存在就执行操作,不存在就可以等待一定的时间段。在webDriver中提供了WebDriverWait类,可以智能的等待页面元素加载完成再执行操作。核心函数如下:
def until(self, method):
"""Calls the method provided with the driver as an argument until the \
return value is not Falsy."""
end_time = time.time() + self._timeout
while(time.time() < end_time):
try:
value = method(self._driver)
if value:
return value
except NoSuchElementException:
pass
time.sleep(self._poll)
raise TimeoutException()
利用这个类就可以实现智能等待的效果:
wait = WebDriverWait(webdriver.chrome(),30)
elm = wait.until(lambda x: x.find_element_by_xpath(Xpath))
elm.click()
再提供一个判断元素存在否:
def isPresent(self):
try: driver.find_element_by_xpath(Xpath)
except NoSuchElementException, e: return False
return True