Python测试进阶(二)
创始人
2024-04-21 14:37:09
0

文章目录

  • 简介
  • 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

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...