UI自动化常见的等待方式,这3种是重中之重

1217 篇文章 11 订阅
682 篇文章 3 订阅

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、计算机基础

资料获取方式 :

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据UIAutomation封装了很多自定义方法 现在只需要实例化之后 直接调用方法即可完成。比如单击某个按钮,现在只需要直接调用ClickElement,非常实用。 ClickElement 单击指定的自动化元素 DisselectAllDataGridRow 不选中所有行 DisselectDataGridRow 不选中特定的某一行 FocusWindow 获取窗口焦点 GetAllElement 获取指定父自动化元素下的所有激活的控件 GetAllElementDetails 获取指定自动化元素下的详细信息包括AutomationID,ControlType以及Name GetAllMenus 获取所有菜单项 GetAllSubMenus 获取某个菜单下的所有子菜单项 GetColumnsFromGridLine 获取指定行的所有列 GetColumnValuesFromGridLine 获取行的每一列数据 GetControlType(AutomationElement) 获取制动自动化元素的控件类型 GetControlType(TypeOfControl) 获取UIAutomation的控件类型 GetDocumentText 获取document控件的值 GetElementByID 获取父自动化元素下指定元素控件ID的引用 GetElementByName 获取父自动化元素下的指定子元素的引用 GetElementsByControlType 获取父自动化元素下的特定类型的所有自动化元素 GetGridLinesFromDataGrid 获取网格控件的全部行元素的引用 GetHeaderFromDataGrid 获取指定网格控件的标题栏引用 GetMenuBar 获取菜单栏控件 GetMenuByName 通过特定的名称去获取菜单UI自动化元素 GetName 获取指定自动化元素的名称 GetSubMenuByName 获取主菜单下的指定子菜单项的引用 GetValue 获取指定自动化元素的值 GetWindowByName(String) 获取desktop下的指定窗口名称的子UI自动化元素 GetWindowByName(String, AutomationElement) 获取特定父UI自动化元素下的制定窗口名称的子UI自动化元素 GetWindowList() 获取当前桌面根下所有的UI自动化元素下 GetWindowList(AutomationElement) 获取特定父UI自动化元素下的所有窗口的名称 RefindMainApplication 重新获取desktop下的指定窗口的自动化元素引用 SelectAllDataGridRow 选中所有行 SelectDataGridRow(AutomationElement) 选中特定的某一行 SelectDataGridRow(AutomationElement, Boolean) 将特定的DateGridRow加入选中项中 SelectValueInComboBox 从下拉框中选中指定值的项 SelectValueInListBox 从列表中选中指定值的项 SetValue 给予指定自动化元素赋值 以上的方法还不是很完善 正在完善中。如果有什么意见和建议,请发送邮件获取 chenxu7601257@qq.com 如果你看了这个帮助文件之后觉得有用的,请发邮件获取,我将把dll文件给你。谢谢。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值