UI自动化常见的等待方式

在UI自动化中常常会出现脚本不稳定的情况,元素有时候能够定位,有时候却定位不到的情况。以上的情况就可以通过等待的方式去解决,下面我们就来介绍下常见的等待方式。

1.强制等待:(sleep)

强制等待:不管浏览器元素是否加载完成,程序都得等待3秒,3秒一到,继续执行下面的代码。代码如下:

from selenium import webdriver      # 导入selenium中的webdriver
from time import sleep         # 导入time模块中的sleepdriver = 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模块中的sleepdriver = 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()

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走


这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….在下方我的公众号里免费获取~

UI自动化常见的等待方式相关推荐

  1. 最全面的UI自动化面试题全在这里了!你还在考虑什么?

    1.你是如何搭建ui自动化框架的? 在搭建ui自动化框架,使用的是po设计模式,也就是把每一个页面所需要 操作的元素和步骤都封装成一个页面类中.然后使用selenium+unittest搭建 四层框架 ...

  2. Appium+PythonUI自动化之webdriver 的三种等待方式(强制等待、隐式等待、显示等待)

    在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时时间,大致应该在1-3秒的样子,如果这个时间内仍然定位不到元素,就会抛出异常,中止脚本执行.我们可以通过在 ...

  3. 怎么通过UI自动化方式获取文章信息?

    出于学习研究,对某账号的文章.视频分析一翻,尝试使用自动化方式看能否获取相应信息. 获取某号的文章有多重方法: 第一种是通过搜狗浏览器搜索账号(这种方式每天只能获取一篇文章,基本上没啥用.): 第二种 ...

  4. Selenium4.0+Python手撸自动化框架系列之 Web元素等待方式介绍 与 封装

    目录 前言 三种等待 一.线程等待 二.隐性等待 三.显性等待 封装 一.参数设计 二.函数名设计 三.封装代码设计 前言 web自动化测试,常常因为硬件配制,浏览器,网速等因素导致网页加载速度过慢, ...

  5. 干货,用UI自动化方式获取视频信息,请勿恶意爬虫

    这一期我们来分享利用UI自动化方式获取视频信息 1.分析请求数据(包括解析文章请求.内容请求.视频请求.token等解析): # -*- coding = utf-8 -*- # ---------- ...

  6. python ui自动化_pythonUI自动化整理

    python实现UI自动化整理 1.用到的包 selenium 常见的浏览器操作 openpyxl 读写处理excel数据参数 PyMySQL(python3) 读写mysql数据库 unittest ...

  7. Android手机QQ的UI自动化实践

    UI自动化 我们为什么要搞UI自动化 可能很多同学都有疑问:我们写了这么多单元测试,为什么还需要UI自动化测试呢? 按照测试金字塔理论,其实每种类型的测试都有自己的意义,UI自动化的意义就在于更贴近用 ...

  8. Android手机QQ的UI自动化实践,音视频服务器开发难点

    在上一步环节中,我们虽然确定了自动化框架,但是框架只提供底层的驱动能力,如果无统一封装模式进行规范,随着用例的增多会变得难以维护,所以我们需要一个统一模式来封装细节,可以使 testcase 更稳健, ...

  9. 浅尝UI自动化之Airtest实践

    1.浅尝UI自动化之Airtest实践 背景 由于很多公司都采用敏捷开发的模式,测试也要跟着进行敏捷测试.而每个迭代的周期非常短,经常要对原有功能进行回归测试,这样就增加了大量重复人力成本. 引入UI ...

最新文章

  1. 一文了解人脸识别:从实现方法到应用场景都讲明白了
  2. FreeRTOS 任务间同步和通信方法
  3. Windows7下安装redmine-3.4.6
  4. 移动端web轮播图插件swiper,功能很强大
  5. [翻译]Popfly系列课程7 –深入幕后:使用 Popfly学习XML的初学者指南
  6. 关于局域网计算机ip地址设置,怎么设置局域网计算机的IP地址
  7. 杭州最新公交线路一览(91-100)
  8. Macos安装lightgbm时遇到的坑
  9. 沈航计算机学院杨华,考研榜样经验分享之电子信息工程学院篇-沈航学生处
  10. fiyme android底层,魅族首批Android 10底层Flyme于今日正式推送
  11. 中国人民大学_《组织行为学》_14.相对剥夺:怎样快速形成凝聚力?
  12. 使用ps优化图片,减少图片内存大小
  13. 攻略(一):骑马与砍杀-潘德的预言mod快速自立攻略
  14. 外卖领券CPS的可玩性探索
  15. Vivado使用技巧(22):综合策略与设置的选择
  16. 如何删除日期中的不必要字段
  17. 免费顶级域名注册 - 穷建站之路
  18. 微型计算机中主板上的主桥,什么是微型计算机一级维修与二级维修如何对主板进行二级维修...
  19. 素人做课会踩的3大坑,你中了几个?
  20. 节能低电压电机驱动芯片TMC2300

热门文章

  1. Kubernetes入门一:介绍及环境准备
  2. 从零开始学习Java设计模式 | 创建型模式篇:建造者模式
  3. 华为8月9日发布鸿蒙,8月9日华为正式发布鸿蒙系统
  4. 作为技术人员,我是如何安排学习的
  5. session_Composite(组合模式)
  6. 精致生活品味相伴,Barsetto百胜图BAC025B胶囊咖啡机测评
  7. 2019年数学建模C题
  8. 《Tux福音》中英对照注释版
  9. 没有学历可以学习游戏建模吗?这问题真致命!
  10. 新款奔驰S400L改装原厂360全景影像系统,不在担心走向问题