UI自动化常见的等待方式
在UI自动化中常常会出现脚本不稳定的情况,元素有时候能够定位,有时候却定位不到的情况。以上的情况就可以通过等待的方式去解决,下面我们就来介绍下常见的等待方式。
1.强制等待:(sleep)
强制等待:不管浏览器元素是否加载完成,程序都得等待3秒,3秒一到,继续执行下面的代码。代码如下:
from selenium import webdriver # 导入selenium中的webdriver from time import sleep # 导入time模块中的sleep driver = webdriver.Chrome() driver.get("https://www.baidu.com") # 打开百度首页网站 sleep(2) # 等待两秒 driver.find_element_by_id("kw").send_keys("它石软件测试") # 在百度首页输入框中输入它石软件测试 driver.find_element_by_id("su").click() # 点击百度一下按钮 sleep(2) driver.quit() # 关闭浏览器
2.隐式等待:(implicitly_wait)
implicitly_wait(x):设置等待时间为x秒,等待元素加载完成,如果到了时间元素没有加载出,就抛出一个NoSuchElementException的错误。代码如下:
from selenium import webdriver # 导入selenium中的webdriver from time import sleep # 导入time模块中的sleep driver = webdriver.Chrome() driver.implicitly_wait(30) # 隐性等待,最长等30秒 driver.get("https://www.baidu.com") # 打开百度首页网站 driver.find_element_by_id("kw").send_keys("它石软件测试") # 在百度首页输入框中输入它石软件测试 driver.find_element_by_id("su").click() # 点击百度一下按钮 driver.quit() # 关闭浏览器
注意:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。
3.显示等待:(WebDriverWait)
显示等待:设置一个等待时间和一个条件,在规定时间内,每隔一段固定时间查看下条件是否成立,如果成立那么程序就继续执行,否则就提示一个超时异常。
通常情况下WebDriverWait类会结合ExpectedCondition类一起使用。代码如下:
WebDriverWait的具体参数和方法:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None) driver: 浏览器驱动 timeout: 超时时间,等待的最长时间 poll_frequency: 每次检测的间隔时间,默认是0.5秒 ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常 until(method,message='') method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False message: 如果超时,抛出TimeoutException,将message传入异常
ExpectedCondition中常用的判断条件有以下几种:
# 判断指定元素是否加载出来 presence_of_element_located # 判断某个元素是否可见 visibility_of_element_located #判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement frame_to_be_available_and_switch_to_it # 判断元素是否被选中 element_located_to_be_selected # 判断元素是否可点击 element_to_be_clickable:
实际代码如下:
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 引入By定位方式 driver = webdriver.Chrome() driver.get('https://www.baidu.com') # 打开百度首页 # 设置判断条件:等待id='kw'的元素加载完成,设置浏览器:driver,等待时间:20s,每隔0.5秒去检查一次元素是否加载完成 input_element = WebDriverWait(driver, timeout=20,poll_frequency=0.5).until(EC.presence_of_element_located((By.ID, 'kw'))) input_element.send_keys('输入的数据') # 在输入框输入需要输入的数据 driver.quit()
最后: 可以在我的VX公众号:【自动化测试老司机】 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。也可以和我交流互动哈
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
软件测试面试小程序
被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!
涵盖以下这些面试题板块:
1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux
6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础
资料获取方式 :