如今大部分web程序使用Ajax技术,当浏览器加载页面时,页面元素可能不是同时加载完成,如果因为加载某个元素超时导致ElementNotVisibleException的情况出现,自动化脚本的稳定性就会降低。

WebDriver 提供了两种类型的等待:显示等待、隐式等待、强制等待

  • 隐式等待(页面加载)

隐式等待是在创建driver时,为浏览器对象创建的一个等待时间。

是在尝试得到某个元素时,得不到就等待固定长度的时间加载全部页面元素。默认设置是0秒。一旦设置了隐式等待时间,它的作用范围就是Webdriver对象实例的整个生命周期。

隐式等待设置是全局等待,分为:

  1. 页面加载超时等待;
  2. 页面元素加载超时;
  3. 异步脚本超时
from selenium import webdriver

driver = webdriver.Chrome()
# 定位对象时,给10s时间,如果10s内还没有定位到,则抛出异常
driver.implicitly_wait(10)
# 设置页面加载超时为10s
driver.set_page_load_timeout(10)
# 异步脚本的超时时间为3s
driver.set_script_timeout(10) driver.get("http://yunpan.360.cn") driver.find_element_by_id("XXX")
  •  显式等待(元素加载)

用于一段代码内,只要等到条件满足,就继续执行,否则就一直等,直到规定时间内都没有达到条件,就抛出异常

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By driver = webdriver.Chrome()
driver.get("http://www.xxx.com")
# 显示等待
element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, 'element_id')))
element.click() driver.quit()

WebDriverWait()
它是由 webdirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。具体格式如下:

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

  • driver - WebDriver 的驱动程序(Ie, Firefox,Chrome 等)
  • timeout - 最长超时时间,默认以秒为单位
  • poll_frequency - 休眠时间的间隔(步长)时间,默认为 0.5 秒
  • ignored_exceptions - 超时后的异常信息,默认情况下抛 NoSuchElementException 异常。
  • WebDriverWait()一般由 until()(或 until_not())方法配合使用,下面是 until()和 until_not()方法的说明。
    • until(method, message=' ') 调用该方法提供的驱动程序作为一个参数,直到返回值为 Ture。
    • until_not(method, message=' ') 调用该方法提供的驱动程序作为一个参数,直到返回值为 False。

Expected Conditions

expected_conditions 类提供一些预期条件的实现。

  • presence_of_element_located()判断元素是否存在。
  • title_is 用于判断标题是否 xx。
  • title_contains 用于判断标题是否包含 xx 信息。
  • presence_of_element_located 元素是否存在。
  • visibility_of_element_located 元素是否可见。
  • visibility_of 是否可见
  • presence_of_all_elements_located判断一组元素是否存在
  • text_to_be_present_in_element 判断元素是否有 xx 文本信息
  • text_to_be_present_in_element_value 判断元素值是否有 xx 文本信息
  • frame_to_be_available_and_switch_to_it 表单是否可用,并切换到该表单。
  • invisibility_of_element_located 判断元素是否隐藏
  • element_to_be_clickable 判断元素是否点击,它处于可见和启动状态
  • staleness_of等到一个元素不再是依附于 DOM。
  • element_to_be_selected 被选中的元素
  • element_located_to_be_selected 一个期望的元素位于被选中。
  • element_selection_state_to_be一个期望检查如果给定的元素被选中。
  • element_located_selection_state_to_be期望找到一个元素并检查是否选择状态
  • alert_is_present 预期一个警告信息

除了 expected_conditions 所提供的预期方法,我们也可以使用 is_displayed()方法来判断元素是否可见。

#coding=utf-8

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait driver = webdriver.Firefox()
driver.get("http://www.baidu.com") input_ = driver.find_element_by_id("kw")
element = WebDriverWait(driver,5,0.5).until( lambda driver :input_.is_displayed())
input_.send_keys('selenium')
driver.quit()
  • 强制等待

固定休眠

time.sleep(5)

selenium 显示等待、隐式等待、强制等待的更多相关文章

  1. python+selenium基础篇,三种等待方式,显示、隐式、强制等待

    1.显示等待: from selenium import webdriver from time import sleep from selenium.webdriver.support.ui imp ...

  2. python+selenium六:隐式等待

    python+selenium六:隐式等待   # 隐式等待 # 全局生效,只写一次即可(仅当前页面)# 若有页面切换,需sleep等待新页面出现后,再使用此方法 # 如:在35秒内,等待操作完成,完 ...

  3. [Effective JavaScript笔记]第3条:当心隐式的强制转换

    js对类型错误出奇的宽容 3+true;  //4 3*””;  //0 3+[]; //3 3+[3]; //33 以上表达式在许多语言早就变红了.而js不但不报错还给你个结果. 极少情况会产生即时 ...

  4. Intent 显示意图 隐式意图

    //显式意图  :必须指定要激活的组件的完整包名和类名 (应用程序之间耦合在一起) // 一般激活自己应用的组件的时候 采用显示意图  //隐式意图: 只需要指定要动作和数据就可以 ( 好处应用程序之 ...

  5. 转 Python selenium 强制等待显示等待隐式等待

    1. 1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间. 看代码: # -*- codi ...

  6. 【Selenium】显示、隐式等待

    显示等待 WebDriverWait 超时抛出TimeOutException,默认500毫秒 public class WaitToReturnElement { /* * 设置超时时间为5秒,返回 ...

  7. 2.8 (显示、隐式、线程休眠) selenium 等待方式 ❀

    http://blog.csdn.net/pf20050904/article/details/20052485 http://www.cnblogs.com/hellokitty1/p/629584 ...

  8. [selenium webdriver Java]隐式的等待同步

    Selenium WebDriver提供了隐式等待来同步测试.当使用了隐式等待执行测试的时候,如果WebDriver没有在DOM中找到元素,将继续等待,超出设定时间后,抛出找不到元素异常 即,当元素没 ...

  9. C#接口的显示和隐式实现

    早上骑车上班走到半路发现手机忘带了,这年代兜里没装一分现金,吃饭都要刷手机,上班时间无聊了不能玩手机更是大问题,所以果断掉头拿手机.取完手机刚出门看这天阴沉沉的貌似要下雨,没雨衣,骑车又不能打伞,上次 ...

  10. JS当心隐式的强制转换

    JavaScript对类型错误出奇的宽容 3 + true; // 4 null + 3; // 3 运算符+(加号)的重载 运算符+既重载了数字相加,又重载了字符串连接操作.具体是数字相加还是字符串 ...

随机推荐

  1. Spyder中的一些快捷键

    熟练spyder中的一些快捷键后,能极大提升code效率. 这里列出常用的快捷键.(注:在spyder导航栏Tools-Preferences-Keyboard shortcut中有所有的快捷键) T ...

  2. Oracle数据库创建与连接

    一.Oracle数据库的安装 1.下载Oracle数据库 网址:Oracle 数据库软件下载 | Oracle 技术网 | Oracle 由于需要注册,所以我就没有采用这种下载方式,  右击该网页查看 ...

  3. nodejs进阶:密码加盐:随机盐值

    demo var crypto = require('crypto'); function getRandomSalt(){ return Math.random().toString().slice ...

  4. Magento 消息提示

    Magento 消息提示 //成功 Mage::getSingleton('customer/session')->addSuccess('恭喜您关联会员卡成功!'); //失败 Mage::g ...

  5. Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别  Pig

    Hadoop生态上几个技术的关系与区别:hive.pig.hbase 关系与区别 Pig 一种操作hadoop的轻量级脚本语言,最初又雅虎公司推出,不过现在正在走下坡路了.当初雅虎自己慢慢退出pig的 ...

  6. 访问者模式和 ASM

    文章目录 一. 概述 & 定义 二. 示例 2.1 创建抽象元素 2.2 创建具体元素 2.3 创建抽象访问者 2.4 创建具体访问者 2.5 访问者代码调用 三. ASM 中的访问者模式 3 ...

  7. C# 中如何输出双引号(转义字符的使用)

    实现效果: 输出这样的一个含有双引号的字符串 "hello" 方式一: 不用 @ 时转义      System.Console.WriteLine("\"he ...

  8. HDU 5443 The Water Problem (ST算法)

    题目链接:HDU 5443 Problem Description In Land waterless, water is a very limited resource. People always ...

  9. 1067 Sort with Swap(0, i) (25 分)

    Given any permutation of the numbers {0, 1, 2,..., N−1}, it is easy to sort them in increasing order ...

  10. Codeforces 1191B Tokitsukaze and Mahjong

    题目链接:http://codeforces.com/problemset/problem/1191/B 题意:类似于麻将,三个一样花色一样数字的,或者三个同花顺就赢了,新抽的能当任何类型,问至少几个 ...