1.隐式等待:driver.implicitly_wait()

driver = webdriver.Chrome()
driver.implicitly_wait(10)     #获取元素时最多会等待10秒,作用于所有的元素

2.显示等待:selenium.webdriver.support.excepted_conditions期望的条件和selenium.webdriver.support.ui.webDriverWait 来配合完成

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait # 显示等待
# 设置等待执行语句
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By driver = webdriver.Chrome()
driver.get(r'http:\\www.douban.com')
elename='div.ip-table-body table tbody>tr:nth-of-type(2)>td:nth-of-type(4)>a:nth-of-type(1)'
try:
self.findele=WebDriverWait(self.wb,25).until(EC.visibility_of_element_located((By.CSS_SELECTOR,elename))) #等待元素在页面上可见
self.findele.click()
except Exception as e:
print('e')

 3.Expected Conditions 类提供的预期条件判断方法(参考资料链接:https://blog.csdn.net/zyooooxie/article/details/84561783

1.title_is(‘title’) 判断当前页面的title是否完全等于(==)预期字符串,
返回布尔值:如果完全一致,返回Ture,否则返回Flase

和显式等待结合后,条件符合返回True,不符合 显式等待+报错
WebDriverWait(self.driver, 10).until(ec.title_is('百度一下,你就知道'), '失败') 打印结果是True

2.title_contains(‘title’) 判断当前页面的title是否包含预期字符串,
返回布尔值:True/False;如果完全一致,返回Ture,否则返回Flase

和显式等待结合后,条件符合返回True,不符合 显式等待+报错
WebDriverWait(self.driver, 10).until(ec.title_contains('知道'), '失败') 打印结果是True

3.presence_of_element_located(locator) 判断某个locator元素是否被加到DOM树里,并不代表该元素一定可见(元素是隐藏的)
如果定位到就返回WebElement,找不到元素 报错Message: no such element: Unable to locate element

WebDriverWait(driver, 10).until(ec.presence_of_element_located((By.ID, 'su'))) 打印结果是WebElement
和显式等待结合后,如果定位到就返回WebElement,找不到元素 显式等待+报错

4.visibility_of_element_located(locator) 判断某个locator元素是否可见。
可见代表非隐藏、可显示,并且元素的宽和高都大于0
如果定位到就返回WebElement,找不到元素 报错Message: no such element: Unable to locate element

WebDriverWait(driver, 10).until(ec.visibility_of_element_located((By.ID, 'su'))) 打印结果是WebElement
和显式等待结合后,如果定位到就返回WebElement,找不到元素 显式等待+报错

5.visibility_of(element) 判断element元素是否可见。
Visibility means that the element is not only displayed but also has a height and width that is greater than 0.

直接传element;
如果可见就返回这个WebElement元素;不可见就返回 False;找不到的 报错的是 no such element: Unable to locate element
和显式等待结合后,不可见的 显式等待+报错;可见的返回WebElement;不存在的报错 Message: no such element: Unable to locate element

WebDriverWait(driver, 10).until(ec.visibility_of(driver.find_element(By.ID, 'su')))
WebDriverWait(driver, 10).until(ec.visibility_of(driver.find_element_by_link_text('高级搜索123')))
如果是第二个 实际不会到显式等待

10.invisibility_of_element_located(locator) 判断某个locator元素是否隐藏DOM树(隐藏、不存在、可见)
# 可见的元素返回False,不存在的元素见返回True;隐藏的元素返回WebElement

# 和显式等待结合后,可见的元素显式等待+报错;隐藏的元素会返回WebElement;不存在的元素 返回True
# WebDriverWait(self.driver, 10).until(ec.invisibility_of_element_located((By.ID, 'toStationText')), '失败')

7.text_to_be_present_in_element(locator,text) 判断某个locator元素的text是否包含了预期的字符串
# 请先确定此元素的text [元素文本]
# 符合就返回True,不符合返回False;
# 和显式等待结合后,符合返回True;不符合,显式等待+报错

WebDriverWait(self.driver, 10).until(ec.text_to_be_present_in_element((By.PARTIAL_LINK_TEXT, '多产'), '产品'), '失败')

8.text_to_be_present_in_element_value(locator,value) 判断某个元素的value属性值是否包含了预期的字符串
# 请先确定此元素的value属性值 print(abc.get_attribute('value'))
# 条件符合 返回True;条件不符合返回False
# 和显式等待结合后,返回返回True;条件不符合 显式等待+报错

# WebDriverWait(driver, 10).until(ec.text_to_be_present_in_element((By.ID, 'su'),'百度一下'))
# 等待'su'元素的value属性值是否包含'百度一下'

9.frame_to_be_available_and_switch_to_it() 判断该frame是否可以switch进去

# 如果直接传入定位方式id,可以的话就返回True并switch进去,否则返回False
# 也可传入locator元组或WebElement,可以的话就返回True并switch进去,否则报错 Message: no such element

# 和显式等待结合后,传入定位方式id、locator元组,可以的话就返回True并switch进去,否则 显式等待+报错
# 和显式等待结合后,传入WebElement,可以的话就返回True并switch进去,
# 否则找不到定位报错 selenium.common.exceptions.NoSuchElementException: Message: no such element
# WebElement因为是去定位某个元素,定位不到会报错,用不到那个显式等待的!在执行前就已经报错 找不到元素

frame的定位 driver.switch_to.frame(xxxx) xxxx可以是id属性值;或是查找到这个元素WebElement,不可以使用locator元组

WebDriverWait(driver, 10).until(ec.frame_to_be_available_and_switch_to_it('frame_id'))
WebDriverWait(driver, 10).until(ec.frame_to_be_available_and_switch_to_it((By.ID, 'frame_id')))
WebDriverWait(driver, 10).until(ec.frame_to_be_available_and_switch_to_it(
driver.find_element(By.ID, 'frame_id')))

11.element_to_be_clickable(locator) 判断某个locator元素是否可点击
# 元素可以被看见visibility_of_element_located()并且可以被使用is_enabled()返回WebElement;
# 找不到的元素 报错 Message: no such element: Unable to locate element
# 隐藏的元素返回 False;

# WebDriverWait 实际显式等待+ 报错的 包括 隐藏的元素和不存在的元素;可点击返回WebElement

# WebDriverWait(driver, 10).until(ec.element_to_be_clickable((By.ID, 'su')))

12.staleness_of(element) 等某个元素从DOM树中移除。传入WebElement对象

# returns False if the element is still attached to the DOM, true otherwise.
# 如果元素is_enabled()返回False;其他返回True;根本不存在的报错 Message: no such element

# 和显式等待结合后,元素is_enabled() 显式等待+报错;不然返回True;根本不存在的报错 Message: no such element

WebDriverWait(self.driver, 10).until(ec.staleness_of(self.driver.find_element_by_id('su')))

13.element_to_be_selected(element) 等待element元素是被选中,一般用在下拉列表
# 如果元素是被选中的,返回True;如果不是,返回False;定位失败的 报错 Message: no such element: Unable to locate element

# 和显式等待结合后,符合条件返回True;不符合就显式等待+报错;定位失败的 报错 Message: no such element

16.element_located_to_be_selected(locator) 等待locator元素是被选中
# 如果元素是被选中的,返回True;如果不是,返回False;元素是根本不存在的,就报错 Message: no such element: Unable to locate element

# 和显式等待结合后,符合条件的选项返回True;不符合条件的选项、和不存在的选项 都显式等待+报错

14.element_selection_state_to_be(element, is_selected) 判断某个元素的选中状态是否符合预期;

# 传入WebElement对象以及2种状态(True、False),相等返回True,否则返回False;找不到的报错 Message: no such element: Unable to locate element
# is_selected is a Boolean.所以状态一定不能输入'is_selected'

# 和显式等待结合后 符合判断条件的返回True;不符合判断条件的 显式等待+ 报错;找不到元素的报错 Message: no such element: Unable to locate element

15.element_located_selection_state_to_be(locator,is_selected) 判断某个元素的选中状态是否符合预期。

# 传入locator以及2种状态(True、False),相等返回True,否则返回False;找不到的报错 Message: no such element: Unable to locate element
# is_selected is a Boolean.所以状态一定 不能输入'is_selected'

# print(ec.element_located_selection_state_to_be(abcd10, 'is_selected')(self.driver)) # 返回 False

# 和显式等待结合后,符合状态判断条件的选项 返回True;实际 显式等待 + 报错的 包括不符合状态判断条件的选项 和不存在的选项

17.alert_is_present 判断页面是否存在alert

# 如果有就切换到alert并返回这个Alert;如果没有就返回False

# 和显式等待结合后,没有alert 就显式等待+报错;有alert 就返回这个Alert

6.presence_of_all_elements_located(locator) 判断是否至少有1个元素存在DOM树中。
# 如果定位到就返回WebElement列表,不存在的元素 返回的是 空列表;

# 和显式等待结合后,定位到就返回WebElement列表,查不到这些元素 显式等待 + 报错
# 和显式等待结合后, 符合 最少存在一个WebElement的 返回符合定位元素条件WebElement的列表,找不到元素的 显式等待+报错

WebDriverWait(driver, 10).until(ec.presence_of_all_elements_located((By.ID, 'su')))

18.visibility_of_any_elements_located 判断页面至少有一个元素可见 visible,
传入locator,一旦定位就返回 the list of located WebElements;不可见(元素隐藏 或是 完全不存在,一个都没有)返回的是 空列表;

和显式等待结合后, 符合 最少存在一个WebElement的 返回符合定位元素条件WebElement的列表,不可见(元素隐藏 或是 完全不存在的)显式等待+报错

19.visibility_of_all_elements_located 判断页面all elements存在且可见 visible
all elements are present and visible;
传入locator,全部符合的 就返回 the list of located and visible WebElements;不能全部符合的返回False;不存在的元素返回 空列表;

和显式等待结合后,符合 全部可见WebElement的 返回符合定位元素条件WebElement的列表,找不到元素的 + WebElement不能全部可见的 显式等待+报错

等待的相关链接:https://blog.csdn.net/pengjiangchun/article/details/105509318

selenium 隐式等待与显式等待的更多相关文章

  1. selenium—隐式等待和显式等待

    一.隐式等待和显式等待的区别 隐式等待:是整个页面的等待.设置一个最长的等待时间,在规定时间内整个页面加载完成,则执行下一步,否则继续等待直到最长等待时间结束. 显式等待:是针对某个元素的等待.在设置 ...

  2. Selenium系列(六) - 强制等待、隐式等待、显式等待

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  3. selenium(5)-解读强制等待,隐式等待,显式等待的区别

    背景 为什么要设置元素等待 因为,目前大多数Web应用程序都是使用Ajax和Javascript开发的:每次加载一个网页,就会加载各种HTML标签.JS文件 但是,加载肯定有加载顺序,大型网站很难说一 ...

  4. Selenium4+Python3系列(六) - Selenium的三种等待,强制等待、隐式等待、显式等待

    为什么要设置元素等待 直白点说,怕报错,哈哈哈! 肯定有人会说,这也有点太直白了吧. 用一句通俗易懂的话就是:等待元素已被加载完全之后,再去定位该元素,就不会出现定位失败的报错了. 如何避免元素未加载 ...

  5. selenium的webdriver三种等待方式(显式等待WebDriverWait+implicitly_wait隐式等待+sleep强制等待)

    隐式等待是等页面加载,不是等元素!!! 1.显式等待 一个显式等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码.显式等待是等元素加载!!! 2.隐式等待,相当于设置全局的等待,在定位 ...

  6. [转]静态库、动态库,dll文件、lib文件,隐式链接、显式链接

    转自:https://blog.csdn.net/dcrmg/article/details/53427181 静态链接.动态链接 静态库和动态库分别应用在静态链接方式和动态链接方式中,所谓静态链接方 ...

  7. (4.19)sql server中的事务模式(隐式事务,显式事务,自动提交事务)

    (4.19)sql server中的事务模式(隐式事务,显式事务,自动提交事务) 1.概念:隐式事务,显式事务,自动提交事务 2.操作:如何设置事务模式 3.存储过程中的事务 XACT_ABORT 1 ...

  8. Qt隐式共享与显式共享

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Amnes1a/article/details/69945878Qt中的很多C++类都使用了隐式数据共 ...

  9. 静态库、动态库,dll文件、lib文件,隐式链接、显式链接浅见

    静态链接.动态链接 静态库和动态库分别应用在静态链接方式和动态链接方式中,所谓静态链接方式是指在程序执行之前完成所有的链接工作,把静态库一起打包合入,生成一个可执行的目标文件(EXE文件).所谓动态链 ...

  10. js 五种绑定彻底弄懂this,默认绑定、隐式绑定、显式绑定、new绑定、箭头函数绑定详解

     壹 ❀ 引 可以说this与闭包.原型链一样,属于JavaScript开发中老生常谈的问题了,百度一搜,this相关的文章铺天盖地.可开发好几年,被几道this题安排明明白白的人应该不在少数(我就是 ...

随机推荐

  1. 一个或多个筛选器或者Listeners启动失败

    问题描述 运行ssm项目,tomcat启动后报下面的错误. org.apache.catalina.core.StandardContext.startInternal 一个或多个listeners启 ...

  2. js EventSource 长链接

    有这么一个场景:服务端处理数据,响应比较慢,为了不让用户体会到网页没有反应,服务端需要把处理的每一步操作返回给前端,前端实时进行打印. 1.ajax 轮询 <script> setInte ...

  3. import 更新变量

    其他的模块的变量一经引用,是定值,只能再次import才能更新他的值

  4. 分布式日志传输系统Databus(一)--系统介绍

    Databus系统是微博DIP团队开源的分布式日志传输系统.它是一个分布式.高可用的,用于采集和移动大量日志数据的服务.它基于流式数据的简单而灵活的架构,具备健壮性和容错性,具有故障转移与恢复机制.它 ...

  5. 解决nohup: 忽略输入并把输出追加到"nohup.out"或者nohup: 忽略输入重定向错误到标准输出端

    nohup启动脚本的时候,没有指定输出路径,默认使用当前目录的nohup.out 例如下面这句就是默认使用nohup.out作为输出文件: nohup script.sh & 改成下面的,则/ ...

  6. Linux 系统运行着许多子系统和应用程序。您可以使用系统日志记录从启动时就收集有关运行中系统的数据。有时

    概述 在本教程中,您将学习以下内容: 配置 syslog 守护程序 了解标准设施.优先级和操作 配置日志轮换 了解 rsyslog 和 syslog-ng 系统内部发生了什么 Linux 系统运行着许 ...

  7. 消息队列之 RabbitMQ【验证通过】

    消息队列之 RabbitMQ 预流 关注  22.9 2017.05.06 16:03* 字数 4884 阅读 284691评论 41喜欢 618赞赏 2 关于消息队列,从前年开始断断续续看了些资料, ...

  8. 查阅日志文件:有时候报错信息只是给出了问题的表面现象,要想更深入的了解问题,必须查看相应的日志文件,而日志文件又分为系统日志文件(/var/log)和应用的日志文件,结合这两个日志文件,一般就能定位问题所在。

    作为一名合格的 Linux 运维工程师,一定要有一套清晰.明确的解决故障思路,当问题出现时,才能迅速定位.解决问题,这里给出一个处理问题的一般思路: 重视报错提示信息:每个错误的出现,都是给出错误提示 ...

  9. Ubuntu20.04 网络配置

    Ubuntu20.04 网络配置 设置 ROOT 密码 先设置 root 密码,后面直接使用 root 用户操作 it@it:~$ sudo passwd root [sudo] password f ...

  10. jmeter 非GUI模式下传参

    为什么要使用非GUI模式?--因为GUI模式下运行的时候消耗的内存比非GUI模式大,会使得压力测试的结果不准确. 根据参数类型分为两种:jmeter.properties和system.propert ...