显式等待

显式等待使 WebdDriver 等待某个条件成立时继续执行,否则在达到最大时长时抛弃超时异常 (TimeoutException)。

#coding=utf-8

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox() driver.get("http://www.baidu.com")

element = WebDriverWait(driver,5,0.5).until( EC.presence_of_element_located((By.ID,"kw")) )

element.send_keys('selenium') driver.quit()

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

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()

隐式等待

隐式等待是通过一定的时长等待页面所元素加载完成。哪果超出了设置的时长元素还没有被加载测抛NoSuchElementException 异常。WebDriver 提供了

implicitly_wait()方法来实现隐式等待,默认设置为 0。它 的用法相对来说要简单的多。

from selenium.webdriver.support.ui import WebDriverWait

driver.implicitly_wait(10)

implicitly_wait()默认参数的单位为秒,本例中设置等待时长为 10 秒,首先这 10 秒并非一个固定的等 待时间,它并不影响脚本的执行速度。其次,它并

不真对页面上的某一元素进行等待,当脚本执行到某个 元素定位时,如果元素可定位那么继续执行,如果元素定位不到,那么它将以轮询的方式不断的判

断元素 是否被定位到,假设在第 6 秒钟定位到元素则继续执行。直接超出设置时长(10 秒)还没定位到元素则抛 出异常。

sleep休眠方法

有时间我们希望脚本执行到某一位置时做固定时间的休眠,尤其是在脚本调试的过程中。那么可以使用 sleep()方法,需要说明的是 sleep()由 Python 的 time 模块提供。

from time import sleep

sleep(2)

调用自己定义的函数

我们还可以调用自己写的方法去查找元素。

def smart_find_element(driver,byType,value):
    ele = None;
    max_time = 10;
    times = 0;
    while(ele == None):
        try:
            ele = driver.find_element(byType,value);
        except :
            times += 1;
            if(times > max_time):
                raise Exception("can not find element");
            sleep(1);
    if(ele != None):
        return ele;

调用方法如下:

import SupportUtil

#SupportUtil为方法存放的.py文件名
SupportUtil.smart_find_element(driver,By.CLASS_NAME,"search-icon").click()

Python+Selenium设置元素等待的更多相关文章

  1. Selenium - 设置元素等待

    一.sleep () 休眠方法   --time 固定等待 在开发自动化框架过程中,最忌讳使用Python自带模块的time的sleep方法进行等待,虽然可以自定义等待时间,但当网络条件良好时, 依旧 ...

  2. Selenium with Python 008 - WebDriver 元素等待

    如今大多数Web应用程序使用Ajax技术,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成的,这给元素的定位增加了困难.如果因为在加载某个元素时延迟而造成ElementNotVisibleE ...

  3. Selenium(十一):设置元素等待、上传文件、下载文件

    1. 设置元素等待 前面我们接触了几个元素等待方法,sleep.implicitly_wait方法,这一章我们就来整体学一下. 现在大多数Web应用程序使用的都是AJAX技术.当浏览器加载页面时,页面 ...

  4. selenium webdriver——设置元素等待

    如今大多数Web应用程序使用ajax技术,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加了困难, 如果因为在加载某个元素时延迟而造成ElementNotVisibl ...

  5. Selenium 2自动化测试实战13(设置元素等待)

    一.设置元素等待 若在加载某个元素时延迟而造成的ElementNotVisbleException的情况出现,那么就会降低自动化脚本的稳定性,可以通过设置元素等待改善这种问题造成的不稳定. webdr ...

  6. python selenium 三种等待方式详解[转]

    python selenium 三种等待方式详解   引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待 ...

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

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

  8. python如何实现元素等待

    一.为什么要元素等待? 在UI自动化过程中,元素的出现受网络环境.设备性能等多种元素影响.因此,元素加载和脚本运行到该元素的时间不一致,会报错:元素无法定位. 简单举下例子:实际UI自动化测试中,点击 ...

  9. Python +selenium之设置元素等待

    注:本文转载http://www.cnblogs.com/mengyu/p/6972968.html 当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给元素的定位增加了困难.如果因为在加 ...

随机推荐

  1. (一)ASP.NET中JavaScript的中英文(多语言)实现方案

    PS: https://github.com/hzlzh/Front-End-Standards/wiki/HTML-CSS-JS-i18n 本文原始思路起源于此网址,请自行查看. 本文只是简单的一个 ...

  2. 【转】SSH指南

    OpenSSH OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现.它用安全.加密的网络连接工具代替了 telnet.ftp. rlogin.rsh 和 rcp 工具.Ope ...

  3. poj3080 Blue Jeans(暴枚+kmp)

    Description The Genographic Project is a research partnership between IBM and The National Geographi ...

  4. 见过最好的mybatis学习网站

    http://blog.csdn.net/techbirds_bao/article/details/9233599/

  5. .net 空接合操作符 ??

    C# 提供了一个所谓的 ”空接合操作符“ - 即??操作符,他要获取两个操作数. 假如左边的操作数部位null,就返回这个操作数.如果左边的操作数为null就返回右边. 空接合操作符一个妙处在于,它既 ...

  6. HTML5和CSS3实例教程 中文版 高清PDF扫描版

    HTML5和CSS3实例教程共分3部分,集中讨论了HTML5和CSS3规范及其技术的使用方法.首先是规范概述,介绍了新的结构化标签.表单域及其功能(包括自动聚焦功能和占位文本)和CSS3的新选择器.接 ...

  7. ping包,支持ip录入

    @echo off ::等待用户输入需要监控IP set /p ip=Input the IP required to monitor: echo executing...... :start ech ...

  8. angular HTML属性绑定

  9. NFS4 挂载同主机多个目录

    写在前面的话 事情是酱婶儿的,前两天实在是帮他们查日志查的心里交瘁了,而且有些时候下班了,也就不想再接到这样的需求,于是想基于 Nginx 做一个文件下载中心,在这个文件下载中心里面存有各个服务的日志 ...

  10. Linux环境下jdk、tomcat、redis安装及配置

    环境说明: linux : centOS jdk : 1.8 tomcat : 8.5 redis : 4.0 jdk安装配置 1.下载jdk(这里下载的是jdk-8u181-linux-x64.ta ...