Selenium 三种等待方式(强制等待、隐式等待、显示等待)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium 三种等待方式(强制等待、隐式等待、显示等待)相关的知识,希望对你有一定的参考价值。

参考技术A

缺点: 由于Web加载的速度取决于测试的硬件、网速、服务器的响应时间等因素。如果等待时间太长,容易造成时间浪费,如果等待时间太短又可能会造成在web还没有加载完所需要定位的element,而出现报错。
由于等待时间无法确定,使用太多的sleep会影响运行速度,大大地降低效率,所以建议测试中尽量少使用强制等待。

简介: 隐式等待是全局的是针对所有元素,设置等待时间如10秒,如果10秒内出现,则继续向下,否则抛异常。可以理解为在10秒以内,不停刷新看元素是否加载出来。
使用场景: 隐式等待只需要声明一次,一般在打开浏览器后进行声明。声明之后对整个drvier的生命周期都有效,后面不用重复声明。隐式等待存在一个问题,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,仍得等到页面全部完成才能执行下一步。

简介: 显示等待是单独针对某个元素,设置一个等待时间如5秒,每隔0.5秒检查一次是否出现,如果在5秒之前任何时候出现,则继续向下,一般需要配合该类的 until() until_not() 方法一起用,直到超过设置的最长时间,然后抛出超时错误 TimeoutException ,以下介绍几个最常用的方法:

1. 判断element是否可见:visibility_of_element_located(locator) (可见代表element非隐藏,并且element宽和高都不等于 0)

2. 判断某个element是否被加载到dom树:presence_of_element_located(locator) (并不代表该element一定可见)

3. 判断某个element中是否可见并且可点击:element_to_be_clickable(locator)

4. 判断某个element是否被选中:element_to_be_selected(element) (一般用在下拉列表)

selenium的三种等待方式

一、强制等待:

  time.sleep(3)---->强制等待3秒

二、隐式等待: 

  driver.implicitly_wait(20)
  含义:设置的这个20秒表示最大等待时长,它等待到什么情况结束呢?--->它就相当于我们在浏览器中,加载一个页面,看到页面不在转圈圈,全部加载完成之后,才算等待结束。
  全部加载完成在浏览器其实包含以下内容:
    1.页面的html从服务器返回。
    2.页面的所有静态资源,js,css,img,广告,全部从服务器获取,在加载到页面中。

  隐式等待的弊端:
  一般我们在写程序的时候,这里使用等待,最主要的目的就是等待我们想要的数据能够出来就可以了。用隐式等待他是等到所有资源都加载的完成的,我们花了一部分时间,去等待我们不想要的资源,所以隐式等待并不常用。

三、显式等待:会设置一个条件,当页面满足该条件时,等待完成!

  调用模块

    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdrver.common.by import By

    创建一个等待对象

wait=WebDriverWait(driver"""等待作用的那个driver""",20"""最大等待时长,超过时长会报timeout异常""")
wait.until(
            EC.presence_of_element_located(
                    By.XPATH"""定位器的选择器名称。By.ID,By.CSS_SELECTOR""",//div[@class="recreit-list"] """定位器""",locator))

presence_of_element_located:等待条件。

 

以上是关于Selenium 三种等待方式(强制等待、隐式等待、显示等待)的主要内容,如果未能解决你的问题,请参考以下文章

selenium强制等待,隐式等待,显式等待

2018-09-21显示等待、隐式等待和强制等待的区别

(java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待

selenium的三种等待方式

selenium3+python自动化15-三种等待方式

selenium中的显示等待,隐示等待,强制等待