现在的网页越来越多采用了 Ajax 技术,这样程序便不能确定何时某个元素完全加载出来了如果实际页面等待时间过长导致某个dom元素还没出来,但是你的代码直接使用了这个WebElement,那么就会抛出NullPointer的异常。为了解决这个问题。所以 Selenium 提供了两种等待方式:一种是隐式等待、一种是显式等待

隐式等待:

调用driver.implicitly_wait(),那么在获取不可用的元素之前,会先等待一段时间再进行访问

这个代码执行之后会发现在浏览器起来之后要等待5秒钟之后才会报出找不到元素的异常

显式等待:

显式等待是表明某个条件成立后才执行获取元素行为,也可以在等待的时候指定一个最大的时间

.

ID不存在就会在10s等待只有报错

ec.presence_of_element_located((By.ID,”anony-nav”))

如果获取的元素存在就不会等待时间了

常用显示等待中的条件:

1.title_is:判断当前页面的title是否完全等于预期字符串,返回布尔值

2.title_contains:判断当前页面的title是否包含预期字符串,返回布尔值

3.presence_of_element_located:判断某个元素是否被加到dom树下,不代表该元素一定可见

4.visibility_of_element_located:判断某个元素是否可见,可见代表元素非隐藏,并且元素的宽和高都不为0

5.visibility_of:跟上面的方法是一样的,只是上面需要传入locator,这个方法直接传定位到的element就好

6.presence_of_all_elements_located:判断是否至少一个元素存在于dom树中,举个例子,如果页面上有n个元素的class都是’coumn-md-3’,name只要有一个元素存在,这个方法就返回True

7.text_to_be_present_in_element:判断某个元素中的text文本是否包含预期字符串

8.text_to_be_present_in_element_value:判断某个元素中的value属性值是否包含了预期字符串

9.frame_to_be_availabe_and_switch_to_it:判断该frame是否可以switch进去,如果可以,则返回True并且switch进去,否则返回False

10.invisibility_of_element_located:判断某个元素是否不存在于dom树或不可见

11.element_to_be_clickable:判断某个元素是见并且是enable(有效)的,这样的话才叫clickable

12.staleness_of:等某个元素从dom树下移除,返回True或False

13.element_to_be_selected:判断某个元素是否被选中,一般用于select下拉表

14.element_selection_state_to_be:判断某个元素的选中状态是否符合预期

15.element_located_selection_state_to_be:跟上面的方法一样,只是上面的方法传入定位到的element,这个方法传入locator

16.alert_is_present:判断页面上是会否存在alert