1.强制等待sleep()

使用方法:sleep(X),等待X秒后,进行下一步操作。

使用最简单的一种办法就是强制等待sleep(X),强制让浏览器等待X秒,不管当前操作是否完成,是否可以进行下一步操作,都必须等X秒的时间。

缺点:不能准确把握需要等待的时间(有时操作还未完成,等待就结束了,导致报错;有时操作已经完成了,但等待时间还没有到,浪费时间)

优点:使用简单,可以在调试时使用

2.隐式等待implicitly_wait()

使用方法:(WebDriver类下的)implicitly_wait(X),在X时间内,页面加载完成,进行下一步操作

说明:首先Implicit Waits默认是等待时间是0,同时隐性等待是对driver起作用,所以只要设置一次即可,比强制等待更智能

from selenium import webdriver

from selenium.common.exceptions import NoSuchElementException

import time

driver=webdriver.Firefox()

driver.get("https://www.baidu.com")

driver.implicitly_wait(5) #隐式等待时间设置5秒

#检测搜索框是都存在

try:

print(time.ctime()) #打印当前时间,精确到秒

driver.find_element_by_id("kw").send_keys("python") #id 定位,最多等待5秒

driver.find_element_by_css_selector("#su").click() #最多等待5秒,隐式等待对这里的都起到作用,直接执行完

#如果出现了异常,则打印出来

except NoSuchElementException as mss:

print(mss)

finally:

print(time.ctime())

time.sleep(6)

driver.quit()

3.显示等待 WebDriverWait()

需要先导入from selenium.webdriver.support.wait import WebDriverWait

WebDriverWait()会配合until()和until_not()方法一起使用

使用方法:

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None).until(要执行的方法)

driver:浏览器实例

timeout:超时时间,默认已秒为单位

poll_frequency:检测时间间隔,默认0.5秒

ignored_exceptions:报错信息,默认抛出NoSuchElementException

WebDriverWait 类 :until() 和 until_not()

until():可以传两个参数,第一个参数是判断条件,直到第一个参数返回True。第二个参数可以写文字说明。直到条件成立返回为真,等待结束。如果超时,抛出TimeoutException,将message传入异常

until_not():可以传两个参数,第一个参数是判断条件,直到第二个参数返回 False。第二个参数可以写文字说明。直到条件不成立返回为真,是当某元素消失或什么条件不成立则继续执行,等待结束。如果超时,抛出TimeoutException,将message传入异常

以下几个条件验证:

3.1验证 title

title_is :验证传入的参数 title 是否等于 driver.title

title_contains :验证传入的参数 title 是否包含于 driver.title

3.2验证元素是否出现,传入的参数都是元组类型的 locator,如(By.ID,'kw')

presence_of_element_located :只要一个符合条件的元素加载出来就通过

presence_of_all_elements_located :必须所有符合条件的元素都加载出来才行

3.3验证元素是否可见:

visibility_of_element_located :传入的参数是元组类型的 locator

invisibility_of_element_located :传入的参数是元组类型的 locator

visibility_of :传入 WebElement,第一个和第三个是一样的

3.4判断某段文本是否出现在某元素中

text_to_be_present_in_element :判断元素的 text

text_to_be_present_in_element_value :判断元素的 value

3.5判断 frame 是否可切入,可传入 locator 元组或者直接传入定位方式:id、name、index 或 WebElement

frame_to_be_available_and_switch_to_it

3.6判断是否有 alert 出现

alert_is_present

3.7判断元素是否可点击,传入 locator

element_to_be_clickable

3.8判断元素是否被选中

element_to_be_selected :传入 WebElement 对象

element_located_to_be_selected :传入 locator 元组

element_selection_state_to_be:传入 WebElement 对象以及状态,相等返回 True,否则返回 False

element_located_selection_state_to_be:传入 locator 以及状态,相等返回 True,否则返回 False

3.9判断一个元素是否仍在 DOM 中,传入 WebElement 对象,可以判断页面是都刷新

staleness_of

3.10WebElement 自带方法

is_displayed() :判断元素是否展示出来

is_enabled() :判断元素是否可操作

selenium元素等待的三种方法的更多相关文章

  1. 【亲测显式等待】Selenium:元素等待的4种方法

    Selenium:元素等待的4种方法 1.使用Thread.sleep(),这是最笨的方法,但有时候也能用到而且很实用.   2.隐式等待,隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉We ...

  2. Python selenium —— 一定要会用selenium的等待,三种等待方式解读

    发现太多人不会用等待了,博主今天实在是忍不住要给大家讲讲等待的必要性. 很多人在群里问,这个下拉框定位不到.那个弹出框定位不到…各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加 ...

  3. 【转载】一定要会用selenium的等待,三种等待方式必会

    转载地址:http://blog.csdn.net/huilan_same/article/details/52544521,感谢博文,学习了 原文: 发现太多人不会用等待了,博主今天实在是忍不住要给 ...

  4. appium自动化测试等待的三种方法

    第一种  sleep(): 设置固定休眠时间.python 的 time 包提供了休眠方法 sleep() ,导入 time包后就可以使用 sleep()进行脚本的执行过程进行休眠. python # ...

  5. Selenium:元素等待的4种方法

    1.使用Thread.sleep(),这是最笨的方法,但有时候也能用到而且很实用. 2.隐示等待,隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉WebDriver查询Dom一定时间.默认值是 ...

  6. selenium 延迟等待的三种方式

    1.最直接普通的方式:这个是设置固定的等待时间    Thread.sleep(1000);   2.显示等待方式(Explicit Wait):就是明确的要等待的元素在规定的时间之内都没找到,那么就 ...

  7. js中设置元素class的三种方法小结

     一.el.setAttribute('class','abc'); 代码如下: .abc { background: red; } test div var div = document.getEl ...

  8. JavaScript中设置元素class的三种方法小结

    第一.element.setAttribute('class','abc');  第二.element.setAttribute('className', 'abc') : 第三.element.cl ...

  9. selenium&appium中的三种等待方式---基于python

    我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中 ...

随机推荐

  1. Mysql 52条SQL语句性能优化策略汇总

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引. 2.应尽量避免在where子句中对字段进行null值判断,创建表时NULL是默认值,但大多数时候应 ...

  2. 每天学习一点ES6(二)let 和 const

    let 命令 let 和 var 差不多,只是限制了有效范围. 先定义后使用 不管是什么编程语言,不管语法是否允许,都要秉承先定义,然后再使用的习惯,这样不会出幺蛾子.以前JavaScript比较随意 ...

  3. 在 xunit 测试项目中使用依赖注入

    在 xunit 测试项目中使用依赖注入 Intro 之前写过几篇 xunit 依赖注入的文章,今天这篇文章将结合我在 .NET Conf 上的分享,更加系统的分享一下在测试中的应用案例. 之所以想分享 ...

  4. Java中常见的json序列化类库 - Jackson

    Jackson 介绍 Jackson框架是基于Java平台的一套数据处理工具,被称为"最好的Java Json解析器". Jackson框架包含了3个核心库:streaming,d ...

  5. Error:java: JDK isn't specified for module 'xxx'异常的解决方法

    问题描述 博主启动的项目的时候出现了一个这样的异常 解决方法 打开左上角这个Project Structure

  6. 前端面试题归类-HTML1

    一.HTML5的新特性? 1.增强了表单,input新增了一些type:常用 color----定义调色板 tel-----定义包含电话号码的输入域 email---定义包含email地址的输入域 s ...

  7. Access-Control-Allow-Headers等基础常识

    跨源资源共享 (CORS) (或通俗地译为跨域资源共享)是一种机制,该机制使用附加的 HTTP 头来告诉浏览器,准许运行在一个源上的Web应用访问位于另一不同源选定的资源. 当一个Web应用发起一个与 ...

  8. 使用postman添加cookie失败和cookie消失问题

    例如 groupId=2; path=/; domain=.www.baidu.com; HttpOnly; Expires=Tue, 16 Jul 2019 03:42:12 GMT; 添加失败和c ...

  9. linux 下socket编程

    原理 类unix系统中, 一切皆文件, 诸如磁盘文件, 显卡, 内核驱动, 网络协议栈等 socket就是linux中提供的用于网络通信的文件接口, 两台机器之间可以读写消息 在使用socket真正的 ...

  10. java容器-Iterator

    1介绍 java中的容器主要是Collection<E>的子类型,即都实现了Iterable<E>接口,即使是Map类型,也有entrySet方法可以获得该Map的所有元素组成 ...