很多人都有这种经历,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. 理解JavaScript变量值

    JavaScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值是指那些可能由多个值构成的对象. 在将一个值赋给变量时,解析器必须确定这个值是基 ...

  2. es6之函数扩展与对象扩展

    一.函数扩展 1.参数默认值 参数有默认值,后面不可以再加没有默认值的变量.如以下test函数中,不可以加写成 function test(x,y="word",z){ } fun ...

  3. Servlet映射的过程

    1.首先通过上图 locolhost:8080/login.html 访问到这个登录的html页 2 通过html页的 action="LoginServlet" 进行映射,所以填 ...

  4. HDU 2031 进制转换(10进制转R进制)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2031 进制转换 Time Limit: 2000/1000 MS (Java/Others)    M ...

  5. iOS定时器-- NSTimer 和CADisplaylink

    iOS定时器-- NSTimer 和CADisplaylink 一.iOS中有两种不同的定时器: 1.  NSTimer(时间间隔可以任意设定,最小0.1ms)// If seconds is les ...

  6. PCB 布线 注意哪些问题记录

    1.过孔不能打在焊盘上 ,这样 焊接的时候 会有焊锡 溢出导致 短路. 2.焊盘的线引出时应该从中间引出,不应该从角落引出 3.当有较粗的电源线连接在元器件上时,最好是 有一根小线连接在元器件上,回流 ...

  7. labview

    1.labview适用于测试测量领域,用于快速构建PC端上位机程序 2.例子: 我的电气参数测试仪. 上位机软件比想象的做的快了十几天... 学校的创新基金可以交差了,界面还是个人比较满意了.. 上图 ...

  8. 一致性模型(consistency model)

    比如下面的例子: 一行X值在节点M和节点N上有副本 客户端A在节点M上写入行X的值 一段时间后,客户端B在节点N上读取行X的值 一致性模型所要做的就是决定客户端B能否看到客户端A写的值.一致性模型分为 ...

  9. springboot自定义异常页面

    废话不多,直接开始. 项目目录: 说明:springboot 静态文件放在static目录中,如images中放的图片:templates目录下error中存放的是错误页面,如500.html代表50 ...

  10. 解决 LLVM 错误 cannot specify -o when generating multiple output files

    Xcode 9 使用 LLVM 混淆器会提示错误: clang: error: cannot specify -o when generating multiple output files 通过对比 ...