很多人都有这种经历,selenium脚本当前运行没问题,过了一段时间再运行就报错了,然后过几天又好了。其中的原因估计60%的人都知道,是因为元素加载这块有问题。通常的解决方案就是加上sleep或者隐式等待(implicitly_wait),后面发现这种办法太浪费时间了,测试用例一旦过多就要抓狂了,并且还是不太稳定。

    其实,要想提升selenium脚本的稳定性和速度,显式等待结合EC(expected_conditions)模块是个非常不错的选择,下面是python语言的写法(人生苦短,我用python),大家可以进行二次封装。

#!/usr/bin/python3# -*- coding: utf-8 -*-# @创建时间: 2018/10/16 09:01# @创建人  : Kevin# @IDE    : PyCharmfrom selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()driver.get('url')

"""   driver不用多说   10表示最大的超时时间(s)     0.1表示查询元素的频率"""
'''判断title是否是一致,返回布尔值'''WebDriverWait(driver,10,0.1).until(EC.title_is("title_text"))

'''判断title是否与包含预期值,返回布尔值'''WebDriverWait(driver,10,0.1).until(EC.title_contains("title_text"))

'''判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回元素'''WebDriverWait(driver,10,0.1).until(EC.presence_of_element_located((locator)))

'''判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大于0'''WebDriverWait(driver,10,0.1).until(EC.visibility_of_element_located((locator)))

'''判断元素是否可见,如果可见就返回这个元素'''WebDriverWait(driver,10,0.1).until(EC.visibility_of(driver.find_element(locator)))

'''判断是否至少有1个元素存在于dom树中,如果定位到就返回列表'''WebDriverWait(driver,10,0.1).until(EC.presence_of_all_elements_located((locator)))

'''判断是否至少有一个元素在页面中可见,如果定位到就返回列表'''WebDriverWait(driver,10,0.1).until(EC.visibility_of_any_elements_located((locator)))

'''判断指定的元素中是否包含了预期的字符串,返回布尔值'''WebDriverWait(driver,10,0.1).until(EC.text_to_be_present_in_element((locator),'预期的text'))

'''判断指定元素的value属性值中是否包含了预期的字符串,返回布尔值(注意:只是value属性)'''WebDriverWait(driver,10,0.1).until(EC.text_to_be_present_in_element_value((locator),'预期的text'))

'''判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False'''WebDriverWait(driver,10,0.1).until(EC.frame_to_be_available_and_switch_to_it(locator))

'''判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素'''WebDriverWait(driver,10,0.1).until(EC.invisibility_of_element_located((locator)))

'''判断某个元素是否可见并且是可点击的,如果是的就返回这个元素,否则返回False'''WebDriverWait(driver,10,0.1).until(EC.element_to_be_clickable((locator)))

'''等待某个元素从dom树中移除'''WebDriverWait(driver,10,0.1).until(EC.staleness_of(driver.find_element(locator)))

'''判断某个元素是否被选中了,一般用在下拉列表'''WebDriverWait(driver,10,0.1).until(EC.element_to_be_selected(driver.find_element(locator)))

'''判断某个元素的选中状态是否符合预期'''WebDriverWait(driver,10,0.1).until(EC.element_selection_state_to_be(driver.find_element(locator),True))

'''判断某个元素的选中状态是否符合预期'''WebDriverWait(driver,10,0.1).until(EC.element_located_selection_state_to_be((locator),True))

'''判断页面上是否存在alert,如果有就切换到alert并返回alert的内容'''accept = WebDriverWait(driver,10,0.1).until(EC.alert_is_present())

selenium自动化之显式等待和EC(expected_conditions)模块的更多相关文章

  1. selenium 找不到元素 (显式等待 和隐式等待的区别)

    selenium自动化页面元素不存在异常发生的原因有一下几点: (1)页面加载时间过慢,需要查找的元素程序已经完成但是页面还未加载成功.此时可以加载页面等待时间. (2)查到的元素没有在当前的ifra ...

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

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

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

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

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

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

  5. selenium 隐式等待与显式等待

    1.隐式等待:driver.implicitly_wait() driver = webdriver.Chrome()driver.implicitly_wait(10)     #获取元素时最多会等 ...

  6. python+selenium 自动化测试——显式等待详解

    1.前言 之前有提到过等待函数,等待函数分为:强制等待(sleep).隐式等待(implicitly_wait),显示等待(WebDriverWait),这次以显示等待方式专门做一次总结,因为我个人是 ...

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

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

  8. 基于Selenium2+Java的UI自动化(8)- 显式等待和隐式等待

    一.隐式等待 package com.automation.waits; import java.util.concurrent.TimeUnit; import org.openqa.seleniu ...

  9. selenium测试(Java)-- 显式等待(九)

    转自:https://www.cnblogs.com/moonpool/p/5668571.html 显式等待可以使用selenium预置的判断方法,也可以使用自定义的方法. package com. ...

随机推荐

  1. 1.spring:helloword/注入/CDATA使用/其他Bean/null&级联/p命名空间

    新建工程,导入jar,添加spring配置文件(配置文件xxxx.xml)! 1.Helloword实现 Helloword.java public class HelloWord { private ...

  2. 提交文件到ng-pages分支

    一.提交dist文件夹到ng-pages分支 git subtree push --prefix=dist origin gh-pages 二.提交所有文件到ng-pages分支 text git:( ...

  3. 【题解】洛谷P3953 [NOIP2017TG] 逛公园(记忆化搜索+SPFA)

    题目来源:洛谷P3953 思路 先用SPFA求一遍最短路 在求最短路的同时可以把所有点到终点的最短路求出来 dis数组 注意要反向SPFA  因为从起点开始可能会走到一些奇怪的路上导致时间负责度增加 ...

  4. Oracle树形结构数据-相关知识总结

    Oracle树形结构数据--基本知识 1.数据组成 2.基本查询 2.1.查询某节点及该节点下的所有子孙节点 SELECT   *      FROM QIANCODE.TREE_TABLE_BASI ...

  5. 时间比较方法DateTime.Compare

    格式:DateTime.Compare(datetime1, datetime2) 参数为时间格式,为第一个参数比较第二个参数,返回小于0的值,等于0或大于0的值. 实例: string st1 = ...

  6. UIButtonType各个类型的解释:

    UIButtonType各个类型的解释: typedef NS_ENUM(NSInteger, UIButtonType) { UIButtonTypeCustom = , UIButtonTypeS ...

  7. iOS视频处理

    在iOS中,apple提供了AVFoundation 用来处理音视频,基本能满足一些常用的音视频处理需求,而且能调用的硬件编解码接口,能提高不少效率,这是其它库所不能达到的.最近做过的Recnow S ...

  8. iOS- CoreData 数据库管理利器!

    1.前文 上次用SQLite3实现了数据管理,这次准备用CoreData来实现. Core Data 是iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据.使用Core D ...

  9. 微信网页授权-公众号支付(获取openid、用户信息等)

    名词解释: openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID 业务功能描述:实现H5页面可以在微信浏览器里面进行微信支付,所以需要 ...

  10. ABAP术语-SAPNET

    SAPNET 原文:http://www.cnblogs.com/qiangsheng/archive/2008/03/17/1109823.html SAPNet is the intranet p ...