Python测试进阶(二)

news2024/9/21 22:31:30

文章目录

  • 简介
  • selenium
    • 等待
    • Web控件交互
    • 表单操作
    • 多窗口
    • frame
    • 多浏览器处理
    • 用 js 操作
    • 文件上传
    • 弹窗
  • pageObject
  • 复用浏览器

简介

  • 这部分主要介绍 web 自动化测试

selenium

  • 专门测试 web 的工具,根据测试用例,直接在浏览器上执行对应动作
  • 还是在 pytest 框架中使用,框架负责管理用例,selenium 负责执行动作
  • 框架图
    1
  • 基本操作直接看这里
  • 除了这个链接里讲的内容,补充一些

等待

  • 有时页面加载或执行某些操作需要等待一定时间,或者是网速抖动也需要时间缓冲,有三种处理方式
    • 直接等待
    • 隐式等待
    • 显式等待
  • 直接等待
    • python 的 sleep() 方法,直接让线程暂停几秒钟,selenium 暂时不执行后续步骤,让浏览器喘口气
    • 缺点:比较粗暴
  • 隐式等待
    • 通过 selenium 提供的方法
      2
  • 显式等待
    • 还是 selenium 提供的函数
    • 可以使用定义好的条件 expected_conditions 判断
      3
    • 也可以自定义函数传给 until,根据源码,定义时要传个形式参数
      4

Web控件交互

  • 除了点击,输入等 web 交互,还需要进阶部分 ,比如滑动、拖拽、双击、右击等 web 操作
  • 这里主要用到两个 action
    5
  • 官方文档
  • ActionChains
    • 两种写法
      6
    • 可以用这个网站练习
      7
    • 鼠标移动到 link 上
      8
    • 拖拽元素到某个地方,有三种方式实现
      9
  • TouchAction
    • 滑动操作 flick;如果不确定滑动的偏移量,就给一个大一些的值,比如10000
      10

表单操作

  • 举个例子就行
    11

多窗口

  • 概念
    1
  • 一般的处理流程
    2
  • demo
    • 所有的 window 句柄支持顺序索引,也可以保存当前的 window 句柄
    • 主要是用 switch_to.window 方法
      3

frame

  • 概念
    1
  • frame 虽然能和其他标签一样在 html 页面中使用,但对 selenium 而言需要单独的方法定位
  • frame 有两种存在方式:
    • 不嵌套:一个页面有一个或多个并行的 frame,里面都是 html 的普通标签
    • 嵌套:一个页面的 frame 里还有 frame
      2
  • 对于嵌套的 frame
    3
  • demo,可以发现,不切换到frame,定位不到
    4
  • 注意操作域,通过 id 或者 父子关系 切换

多浏览器处理

  • 通过传递参数判断在哪个浏览器执行测试
    1
  • 系统环境变量可能并没有 browser 这个键,在启动测试用例前可以设置一下
    if __name__ == '__main__':
        os.environ['browser'] = 'Chrome'
        b = os.getenv('browser')
        print(b)
    

用 js 操作

  • selenium 能够执行 js,所以就可以通过 js 代码直接执行需要的动作
    1
  • 可以在浏览器的 console 中测试,那里执行的效果放到测试用例中也可以
  • demo,execute_script方法
    2
  • 两个 js 语句也可以用 分号 隔开执行
  • 操作时间控件,就是 选日期 那种;就是通过 js 设置
    3
    4
  • js 就是一门 web 语言,和浏览器无缝衔接,驱动 driver 执行 JavaScript 代码不是难事
  • 可以看看之前的 “非js” 方式的底层实现
  • js 和 .net 语言值得学习精进

文件上传

  • 上传图片,只需要把本地图片的路径 send 到 “选择文件” 的按钮就行,不需要点击
    1

弹窗

  • js 弹窗,和之前 window 切换类似
    1
  • div 模态框,比如在登录百度时不会切换界面,直接弹出一个小窗口;或者在百度这里设置皮肤
    2
  • demo for alert
    3

pageObject

  • 问题:测试和断言放在一起,代码修改要同时考虑这两部分,比较麻烦
  • 页面对象(pageObject)就是为了解决这个问题;官方文档;主要原则:
    1
  • 后面会有实战,再体会,设计模式层面的东西比较抽象,而且需要代码功底

复用浏览器

  • 问题:有些测试需要人为介入,比如扫码登录
  • 以企业微信登录为例,我们可以配置浏览器为 debug 模式,只要不关闭,就会保留cookie信息,无需重复登录
    • 用例即使重新执行,但因为还是在之前打开的配置过的浏览器 run 的,就不需要重新扫码
    • 这就是所谓的复用浏览器
  • 这里还是需要扫码一次,我们可以通过植入 cookie 跳过扫码步骤
    2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

牛客网SQL入门复健小练

SQL3:distinct 查询结果去重,返回所有不同的university 方法一:distinct关键字。(注意:这个关键字实际上是 select distinct,如果是多列,多列作为一个组合然后 distinct 去重) 方…

[oeasy]python0028_直接运行_修改py文件执行权限_设置py文件打开方式

直接运行 回忆上次内容 我们把两个程序整合起来了 可以持续输出当前时间每秒都更新但是我想在 shell 里面 只输入文件名(./sleep.py)并回车就能不断输出时间可能吗?🤔 import time while True:print(time.asctime())time.sleep(1) 尝试执行 第 1 句 根…

EXCEL基础:数据透视表(按月或月累计统计操作)

【按月统计数据】: 本操作实现的是原始数据是以日为单位,统计使用的时候,需要以月份或者季度、年份的形式进行,可以使用数据透视表的【组合】功能来 实现,如下所示: 如下所示,将日期字段放在行…

免费分享一套基于VuePress开发的markdown产品文档

vuepress-theme-jingli 文档 | 效果 | 本仓库的gitee镜像 (进入赞助商扫码注册可为本项目作者充电~) 介绍 这个主题的初衷是打造一个好用的、面向程序员的知识管理工具轻松构建一个结构化的知识库,让你的知识海洋像一本本书一样清晰易读。…

Mac 下设置VScode 背景图片失败解法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言解法一:直接修改VScode 的CSS解法二:还是想用插件总结前言 仓库推荐 C/C 每日一练小仓库,慢慢学习C 知识必备仓库 https://…

Java8:SPI机制

参考资料: 《双亲委派机制及其弊端》 《Java中SPI机制深入及源码解析》 《Java SPI思想梳理》 《深入理解 Java 中 SPI 机制》 写在开头:本文为学习后的总结,可能有不到位的地方,错误的地方,欢迎各位指正。 目录 …

MyBatis-Plus联表查询的短板,终于有一款工具补齐了

mybatis-plus作为mybatis的增强工具,它的出现极大的简化了开发中的数据库操作,但是长久以来,它的联表查询能力一直被大家所诟病。一旦遇到left join或right join的左右连接,你还是得老老实实的打开xml文件,手写上一大段…

10.泛型算法

文章目录*泛型算法**10.1概述**10.2初识泛型算法**10.2.1只读算法**算法和元素类型**操作两个序列的算法**10.2.2写容器元素的算法**算法不检查写操作**介绍back_inserter**拷贝算法**10.2.3重排容器元素的算法**消除重复单词**使用unique**10.3定制操作**10.3.1向算法传递函数…

【JavaSE】那些异常

目录 1. 何为异常 2. 异常的分类 2.1 运行异常 / 非受查异常 : 3. 异常的处理思想 4. 异常的抛出 5. 异常的捕获 5.1 异常声明 throws 5.2 try-catch 捕获异常并处理 6. finally 7. 异常的处理流程 8. 自定义异常 1. 何为异常 在Java中,将程序执…

LeetCode 1884. 鸡蛋掉落-两枚鸡蛋 -- 动态规划

鸡蛋掉落-两枚鸡蛋 中等 60 相关企业 给你 2 枚相同 的鸡蛋&#xff0c;和一栋从第 1 层到第 n 层共有 n 层楼的建筑。 已知存在楼层 f &#xff0c;满足 0 < f < n &#xff0c;任何从 高于 f 的楼层落下的鸡蛋都 会碎 &#xff0c;从 f 楼层或比它低 的楼层落下的鸡蛋…

Jedis解读与建议

1. Jedis是什么&#xff1f; 官网 Jedis 是官方推荐的java客户端&#xff01;SpringBoot的RedisTemplate的底层也是Jedis&#xff1b; 2. 为什么使用池化&#xff1f; 背景&#xff1a; Redis为单进程单线程模式&#xff0c;采用队列模式将并发访问变为串行访问。Redis本身没…

leetcode:合并两个有序数组

合并两个有序数组1、题目描述2、解决方案3、代码实现1、题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非…

mutex 锁的理解和思考

并发的影响 goroutine 并发对数据做读写操作&#xff0c;如果没有锁的保护&#xff0c;得到的结果也就是不确定的。我们通过 goroutine 做累加的例子来看一下&#xff0c;下面的情况&#xff0c;我们预期进行了10次循环&#xff0c;每次加1&#xff0c;但执行的结果却不一定的…

离开外包之后,花了10000小时,最后我走进字节跳动拿到了offer

前言&#xff1a; 没有绝对的天才&#xff0c;只有持续不断的付出。对于我们每一个平凡人来说&#xff0c;改变命运只能依靠努力幸运&#xff0c;但如果你不够幸运&#xff0c;那就只能拉高努力的占比。 2020年7月&#xff0c;我有幸成为了字节跳动的一名Java后端开发&#x…

全志A33移植openharmony3.1标准系统之添加产品编译

想玩openharmony很久了,苦于没有合适的板子能让我玩,已经适配好的开发板可真是太贵了啊,所以还是得自己动手啊,毕竟还能深入了解openharmony系统,之前有在A33上把主线uboot和主线内核跑起来,而且drm也是可以正常显示了,现在就基于此将openharmony移植到开发板上。 首先在…

【服务器】基本概念

服务器 文章目录服务器1.概览1.1.本质: **数据接受&传递**, **数据存储**, **数据处理**1.2.种类1.3.单位:1.4.标准1.5.扩展1.6.逻辑架构1.7.缓存Cache:1.8.内存DIMM1.9.DDR1.10.硬盘ref1.概览 1.1.本质: 数据接受&传递, 数据存储, 数据处理 1.2.种类 按应用分类WWW…

Snowflake Decoded基础教程

Snowflake Decoded基础教程 掌握基本的Snowflake概念并获得必要的技能以开始实施基于Snowflake的解决方案 应用程序 课程英文名&#xff1a;Snowflake Decoded Fundamentals and hands on Training 此视频教程共10.0小时&#xff0c;中英双语字幕&#xff0c;画质清晰无水印…

docker启动镜像失败后用日志logs查找失败原因

我用一个自己做的镜像上传到了dockerhub中&#xff0c;然后使用windows拉取pull下来之后&#xff0c;启动不成功&#xff1a; 可以看到&#xff0c;虽然启动了&#xff0c;但是docker ps 后没有看到正在运行的容器&#xff0c;所以我就怀疑启动失败了&#xff0c;但是我又不知道…

关键字(四):goto和void

关键字一.具有争议的关键词—goto二.“空”的关键字—void1.void为什么不能定义变量2.void修饰函数返回值和参数3.void指针一.具有争议的关键词—goto goto语句非常灵活&#xff0c;其实就是从goto这个位置直接跳转到goto后面的那个数据&#xff08;end&#xff09;所对应的位置…

电力系统短期负荷预测(Python代码+数据+详细文章讲解)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…