如今大部分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. 获取min-max之间的随机数

    private static String getRandom(int min, int max){ Integer random =(int)(min+Math.random()*(max-min+ ...

  2. 【Linux】windows下编写的脚本文件,放到Linux中无法识别格式

    注意:我启动的时候遇到脚本错误 » sh startup.sh -m standalone tanghuang@bogon : command not found : command not foun ...

  3. Yii2高级模板的安装

    1.通过composer 安装高级版 C:wampwwwyii>composer create-project --prefer-dist yiisoft/yii2-app-advanced a ...

  4. DELPHI常用类型及定义单元

    Controls Application (the variable not a type) Forms Beep SysUtils or Windows (different functions) ...

  5. C语言变长参数实现

    #include<stdio.h> #include<string.h> #include<stdarg.h> /***编写可变长参数列表的函数案例*/ /* vo ...

  6. nteract 使用教程

    安装 直接去官网下载 一路回车 官网 建立python虚拟环境 和我们平时一样 不同的是在建立完之后 要安装一个kernel Using Python3 with pip and a virtual ...

  7. 如何获取监听iframe src属性的变化进行后续操作

    应用场景,当iframe内发生点击事件内容改变时,如果我们想获取变化后的iframe的 src 属性值,就可以使用如下方式去获取 <iframe id="taobaoOrder&quo ...

  8. json类型的相互转化

    package com.test.jsontest; import java.io.File; import java.io.FileInputStream; import java.io.FileN ...

  9. PAT_A1112#Stucked Keyboard

    Source: PAT A1112 Stucked Keyboard (20 分) Description: On a broken keyboard, some of the keys are al ...

  10. HTML中改变列表的序号类型

    HTML中,<ol>标签表示有序列表,每一个表项的编号默认从数字开始.比如 <html> <head> <title>test</title> ...