博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
selenium 设置元素等待
阅读量:4652 次
发布时间:2019-06-09

本文共 2512 字,大约阅读时间需要 8 分钟。

自动化测试执行过程是非常迅速的,而有些网站加载页面元素的时间由于各种原因会比较慢,这样就会造成一些错误的bug,例如网页还未加载完成时,测试脚本已经开始执行对某个未加载完的元素的操作,然后在控制台报错,未找到该元素。

为了避免快速执行造成的结果的不稳定性,我们在测试中增加“元素等待”控制。

在以往的测试用例中,小编用的都是做简单的方式:

#导入时间设置的库import time#设置等待3秒time.sleep(3)

接下来小编要介绍2种“高阶”等待:显式等待,隐式等待

  • 显式等待:即webdriver等待某个条件成立时继续执行,达到最长时间限制时,抛出异常
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 ECdriver=webdriver.Firefox()driver.get("https://www.baidu.com/")#设置等待element = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"kw")))element.send_keys("selenium")#WebDriverWait()参数'''WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)driver              驱动timeout             最长时间,超过后报错,单位spoll_frequency      间隔时间,默认为0.5signored_exceptions  超时后的异常信息,默认抛出的是NoSuchElementException'''#util()参数'''until(method,message='')直到method但会的参数为true,否则报错messageutil_not(method,message='')不再赘述'''#expected_conditions提供的部分方法介绍#判断标题是否为XXXelement = WebDriverWait(driver,5,0.5).until(EC.title_is("title"))#判断元素是否可见element = WebDriverWait(driver,5,0.5).until(EC.visibility_of_element_located((By.ID,"xxx")))#判断元素是否存在element = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"xxx")))#判断一组元素是否存在element = WebDriverWait(driver,5,0.5).until(EC.presence_of_all_elements_located((By.ID,"xxx")))#判断元素是否有xxx文本信息element = WebDriverWait(driver,5,0.5).until(EC.text_to_be_present_in_element((By.ID,"xxx"),text_=""))#判断元素值是否含有xxx文本信息element = WebDriverWait(driver,5,0.5).until(EC.text_to_be_present_in_element_value((By.ID,"xxx"),text_=""))#判断表单是否可用,并切换到表单element = WebDriverWait(driver,5,0.5).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"xxx")))#判断一个警告信息是否存在element = WebDriverWait(driver,5,0.5).until(EC.alert_is_present())#判断元素是否可点击element = WebDriverWait(driver,5,0.5).until(EC.element_to_be_clickable((By.ID,"xxx")))
  • 隐式等待:通过设置页面的等待时间,等待页面元素加载完成,相比于显式等待简单得多
from selenium import webdriverdriver=webdriver.Firefox()#设置隐式等待时间为5s'''隐式等待不针对页面上的某一个元素进行等待当执行元素定位时被执行 当执行对某元素的定位时:    若元素被直接定位,则继续执行,不执行等待    若元素未被直接定位:        则在设定的时间内,不断的定位该元素(设定为10s)            在第5s(10s内)时定位到了该元素,则继续执行,不再继续等待            10s后还未定位到该元素,则跑出NoSuchElementException'''driver.implicitly_wait(10)driver.get("https://www.baidu.com/")#定位一个错误的元素kw = driver.find_element_by_id("kwlalala")

最后,小编衷心的说一句,显式和隐式等待在没有绝对把握的情况下,最好不要混合使用哦,否则很有额能会造成不可预期的等待时间

转载于:https://www.cnblogs.com/wulisz/p/8257339.html

你可能感兴趣的文章
BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划
查看>>
ubuntu 重启命令,ubuntu 重启网卡方法
查看>>
Linux的学习:
查看>>
JavaScript中的原型继承原理
查看>>
Python logger模块
查看>>
jquery控制css的display(控制元素的显示与隐藏)
查看>>
关于python做人工智能的一个网页(很牛逼)
查看>>
判断控件的CGRect是否重合,获取控件的最大XY值
查看>>
POJ-1128 Frame Stacking
查看>>
python第三十九课——面向对象(二)之初始化属性
查看>>
GET请求在Tomcat中的传递及URI传递
查看>>
Far manager界面混乱问题解决
查看>>
Go数组和切片定义和初始化
查看>>
mysql 5.7 二进制安装方法
查看>>
JavaScript 复杂判断的更优雅写法借鉴
查看>>
<mvc:annotation-driven/>浅析
查看>>
ArcEngine开发之自定义工具
查看>>
SQL视频总结
查看>>
P4878 道路修建-美国
查看>>
dp练习
查看>>