当前位置: 首页 > news >正文

自动化测试常见函数(下篇)

问题:页面中明明存在元素,但是代码执行报错,加入time.sleep()程序执行通过

因为脚本的执行速度非常快,而页面加载的资源比较多,因此当脚本执行到改行代码时页面还没有渲染完成,因此找不到该元素,当添加了time.sleep(3)之后,页面已经在3s内加载完成,此时再去查找该元素就可以找到。

1.等待

通常代码执行的速度比页面渲染的速度更快,如果避免因为渲染过慢出现的自动化误报的问题呢?可以使用selenium中提供的三种等待方法。

1.1 强制等待

time.sleep(3)

当调用该方法时,程序会直接阻塞,等待指定秒数后继续执行后面的代码

优点:使用简单,调试的时候比较有效

缺点:影响运行效率,浪费大量时间,1个或数量较少的测试脚本时,添加强制等待消耗的时间不过数秒,实际在工作中,业务场景比较复杂时,要添加的自动化脚本非常多,通常来说自动化测试脚本数量可达到上百,实际上可接受的自动化运行时间为几秒或者几分钟之内

1.2 隐式等待

隐式等待是一种智能等待,它可以规定在查找元素时,在指定时间内不断查找元素,如果找到则代码继续执行,直到超时没找到元素才会报错。

implicitly_wait()

隐式等待的生命周期:隐式等待作用域是整个脚本的所有元素。即只要driver对象没有被释放掉(driver.quit()),隐式等待就一直生效。

优点:智能等待,作用于全局

1.3 显示等待

显示等待也是一种智能等待,在指定超时时间范围内只要满足操作的条件就会继续执行后续的代码

WebDriverWait(driver,sec).until(functions)
//functions:涉及到selenium.support.ui.ExpectedConditions包下的ExpectedConditions类
from selenium.webdriver.support import excepted_conditions as EC
wait=WebDriverWait(driver,2)
wait.until(EC.invisibility_of_element(By.XPATH,'/dfsfar'))

invisibility_of_element(locator)  :检查元素的不可见性

visibility_of_element(locator)  :检查元素的可见性 都是excepted_conditions里面的方法

alert_is_present()  :检查是否出现弹窗

显示等待可以等待隐式等待无法处理的问题,因为隐式等待无法等待弹窗,弹窗不是页面的元素,无法通过页面元素来定位到弹窗

优点:显示等待是智能等待,可以自定义显示等待的条件,操作灵活

缺点:写法复杂

小提示:隐式等待和显示等待不建议一起用,可能会导致不可预测的等待时间,强制等待可以任意配合隐式等待或者显示等待来使用。

2.浏览器导航

常见操作:

1)打开网站

driver.get("https://tool.ui")

2)浏览器的前进、后退、刷新

driver.back()
driver.forward()
driver.refresh()

3.文件上传

点击文件上传的场景下会出现弹窗系统窗口,进行文件的选择

selenium无法识别非web的控件,上传文件窗口为系统自带,无法识别窗口元素,但是可以使用send_keys来上传指定路径的文件,达到的效果是一样的。

driver.get("https://,..")
driver.find_element(By.CSS_SELECTOR,"").send_keys("D:\\file.text")
//通过send_keys()方法,可以实现将本地文件夹中的文件上传上来,要写完整的路径+文件名

 创建浏览器对象时,可以传递必要的参数:

1)设置无头模式

无头模式:程序在后端运行,界面看不到页面的表现

 自动化打开浏览器默认情况下为有头模式

2)页面加载策略

页面加载方式主要有三种类型

策略说明
normal默认值,等待所有资源下载(主体框架、图片、视频等)
eager √DOM访问已准备就绪,但诸如图像的其他资源可能仍在加载
none ×完全不会阻塞WebDriver

相关文章:

  • Golang | 代理模式
  • Spring Boot项目中实现单点登录(SSO)完整指南
  • Python爬虫第22节- 结合Selenium识别滑动验证码实战
  • 算法刷题记录:滑动窗口经典题目解析
  • 我们来学mysql -- 输出一份“数据备份还原”sh脚本
  • Mac M1编译OpenCV获取libopencv_java490.dylib文件
  • webpack的安装及其后序部分
  • 基于 HEC-RAS 与 ArcGIS 的洪水危险性评估技术— 从地形分析到淹没模拟的全流程实践
  • Python爬虫(40)基于Selenium与ScrapyRT构建高并发动态网页爬虫架构:原理、实现与性能优化
  • (增强)基于sqlite、mysql、redis的消息存储
  • 打卡第38天
  • vue3+vite+amfe-flexible+postcss-pxtorem 实现全分辨率自适应
  • 文件上传绕过方法总结
  • 3分钟学会跨浏览器富文本编辑器开发:精准光标定位+内容插入(附完整代码)
  • 5.27 打卡
  • MySQL问题:MySQL中使用索引一定有效吗?如何排查索引效果
  • 《Python基础》第1期:人生苦短,我用Python
  • 第四十七篇-Tesla P40+Qwen3-30B-A3B部署与测试
  • SD07_NVM的安装及相关操作
  • qiankun 子应用怎样通过 props拿到子应用【注册之后挂载之前】主应用中发生变更的数据
  • O2O网站开发工程师/营销战略包括哪些方面
  • 企业网站优化是什么/广告网站留电话不用验证码
  • 北京好的网站建设公司/平台推广是做什么
  • 公司哪家好点/中山seo关键词
  • 谁知道做网站的电话/如何推广公司
  • 网站制作的发展趋势/chrome官网