自动化测试-web

一、自动化测试理论:

  • UI: User Interface (用户接口-用户界面),主要包括:app 和web
  • UI自动化测试:使用工具或代码执行用例的过程
  • 什么样的项目适合做自动化:
  1. 需要回归测试项目(甲方自营项目、金融、电商)
  2. 需求变动不频繁:稳定的模块
  3. 项目周期长的项目:(甲方自营项目、6个月以上的外包)
  • 自动化测试的目的:提高测试效率

二、自动化测试工具及环境

1. 工具:

  • QTP:商业、收费、支持UI
  • robot framework: python扩展库,使用封装好的关键字驱动、半代码水平、支持UI
  • selenium: 开源/免费/主流支持UI

2. 环境搭建:

所需环境: python解释器+ pycharm+selenium+ 浏览器+ 浏览器驱动

selenium: pip install selenium

浏览器驱动: CNPM Binaries Mirroricon-default.png?t=N7T8https://registry.npmmirror.com/binary.html?path=chromedriver/

windows:

1、解压下载的驱动,获取到chromedriver.exe

2、将chromedriver.exe复制到python.exe所在⽬录即可(避免再次将chromedrver.exe

添加path变量)

mac:

1、解压下载的驱动,获取到chromedriver

2、将chromedriver复制到/usr/local/bin⽬录即可。

三、元素操作

1. 元素定位

通过代码调用方法查找元素

元素定位方法:

id/ name/ class/ tag_name/ link_text/ partial_link_text/ xpath/ css

步骤:

from selenium import webdriver

# 打开浏览器
driver = webdriver.Chrome("/usr/local/bin/chromedriver")
# 输入url
driver.get("https://www.baidu.com")
# 关闭浏览器
driver.quit()

1)id定位

方法: driver.find_element_by_id("id值")

前提:标签必须有id属性

输入方法: 元素.send_keys(“内容”)

driver.get("https://www.baidu.com")
driver.find_element_by_id("kw").send_keys("北京")
driver.find_element_by_id("su").click()

2)  name 定位

方法:driver.find_element_by_name("name属性值")

前提:标签有name属性

特点:由于name属性值可以重复,所以使用时需要查看是否为唯一

3)class 定位

方法:driver.find_element_by_class_name("class属性值")

前提:标签有class属性

特点:class属性值可以有多个值

4)  tag_name 定位

说明:根据标签名进行定位

方法: driver.find_element_by_tag_name("标签名")

提示: 如果页面存在多个相同标签,默认返回第一个

5)link_text 定位

说明:根据链接文本(a标签)定位

方法: driver.find_element_by_link_text("链接文本")

特点:传入的链接文本, 必须全部匹配,不能模糊

6)partial_link_text 定位

说明:根据连接文本(a标签)定位

方法: driver.find_element_by_partial_link_text("连接文本")

特点:传入的链接文本, 支持模糊匹配(传入局部文字)

7)扩展-查找一组元素

说明:返回列表格式

方法:driver.find_elements_by_xxx()

提示:如果没有搜索到符合的标签,会返回空列表

2. 元素定位(xpath\css)

为什么要学习 xpath 和 css?

如果标签没有id/name/class 属性,也不是链接标签,只能用 tag_name定位,比较麻烦。

使用xpath 和 css 比较方便,支持任意属性和层级来查找元素

1)xpath

是 xml path 的简称,使用标签路径来定位

属性:

单属性://*[@属性名='属性值']

多属性://*[@属性名='属性值' and @属性名='属性值']

层级与属性:

说明:如果元素现有的属性不能唯一匹配,需要结合层级使用

语法:

//父标签/子标签 必须为直属子级

//父标签[@属性='值']//后代标签 父和后代之间可以跨越元素

扩展:

根据显示文本定位: //*[text()='文本值']

属性模糊匹配://*[contains(@属性名,'属性部分值')]

2)css选择器

css选择器是html查找元素的工具

id选择器/类选择器/标签选择器/属性选择器/层级选择器

id选择器:

语法:#id属性值

前提: 标签必须有id属性

类选择器:

语法:.class属性值

前提:标签必须有class属性

标签选择器:

语法:标签名

提示:注意标签是否在页面中唯一,否则返回单个或所有

属性选择器:

语法: [属性名='属性值']

层级选择器:

父子关系: 选择器>选择器 ,比如: #p1>input

后代关系:选择器 选择器 比如:#p1 input

元素定位总结:

3. 元素的常用操作方法:

点击 元素.click()

输入 元素.send_keys(内容)

清空 元素.clear()

获取元素信息

  • 获取大小: 元素.size
  • 获取文本: 元素.text
  • 获取属性:元素.get_attribute('属性名')
  • 元素是否可见: 元素.is_displayed()
  • 元素是否可用:元素.is_enabled()
  • 元素是否选中: 元素.is_selected()

4. 浏览器的操作

浏览器常用的api:

窗口最大化: driver.maximize_window()

设置窗口大小: driver.set_window_size(width,height)

设置窗口位置:driver.set_window_position(x,y)

页面后退操作:driver.back()

页面前置操作:driver.forward()

页面刷新:driver.refresh()

浏览器常用获取信息api:

关闭当前窗口: driver.close()

关闭浏览器:driver.quit()

获取标题:driver.title

获取网页地址: driver.current_url

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于令牌桶算法对高并发接口的优化

业务背景 项目中有一个抽奖接口,此接口需要处理高并发问题以及使用脚本作弊的问题。 本文主要探讨如何最大程度地减少脚本作弊行为对抽奖业务的影响。 设计思路 如何减少脚本作弊行为对抽奖业务的影响 使用令牌桶算法,对频率过高的用户请求进行拦截 …

基于ros的相机内参标定过程

基于ros的相机内参标定过程 1. 安装还对应相机的驱动2. 启动相机节点发布主题3. 下载camera_calibartion4. 将红框的文件夹复制在自己的工作空间里边,编译5. 标定完成以后,生成内参参数文件camera.yaml。将文件放在对应的路径下,修改config文…

vex-table—— 获取插入或修改数据后的tableData

例子来自vxe-table。在开发过程中发现新增数据后,输出this.tableData,发现数据并没有被修改 想要获取更新的数据方式为 mounted () {const $table this.$refs.xTableconsole.log("🚀 ~ mounted ~ $table:", $table.tableData)},

[开源] 基于transformer的时间序列预测模型python代码

分享一下基于transformer的时间序列预测模型python代码,给大家,记得点赞哦 #!/usr/bin/env python # coding: 帅帅的笔者import torch import torch.nn as nn import numpy as np import pandas as pd import time import math import matplotlib.pyplo…

BoostCompass(数据准备预处理模块)

阅读导航 一、网页数据下载二、编写数据去标签与数据清洗的模块 Parser✅boost 开发库的安装1. 基本思路2. 详细讲解(1)程序递归遍历目录,收集所有HTML文件的路径(2)对每个HTML文件进行解析,提取出文档标题…

【HTML】简单制作一个3D动态粒子效果的时空隧道

目录 前言 开始 HTML部分 CSS部分 效果图 总结 前言 无需多言,本文将详细介绍一段HTML,具体内容如下: 开始 首先新建文件夹,创建两个文本文档,其中HTML的文件名改为[index.html],CSS的文件名改为[Bab…

【CPA考试】2024注册会计师报名照片尺寸要求解读及手机拍照方法

随着2024年注册会计师考试的临近,众多会计专业人士和学生都开始准备报名参加这一行业的重要考试,报名时间为4月8日至4月30日。报名过程中,一张符合要求的证件照是必不可少的。本文将为您详细解读2024年注册会计师考试报名照片的尺寸要求&…

Kafka基础/1

Kafka 概念 Kafka 是一个分布式的流媒体平台。 应用:消息系统、日志收集、用户行为追踪、流式处理 特点:高吞吐量、消息持久化、高可靠性、高扩展性 术语: broker:Kafka 的服务器,Kafka 当中每一台服务器&#xf…

网络安全---Packet Tracer - 配置扩展 ACL

一、实验目的 在Windows环境下利用Cisco Packet Tracer进行 配置防火墙操作。 二、实验环境 1.Windows10、Cisco Packet Tracer 8.2 2.相关的环境设置 在最初的时候,我们已经得到了搭建好的拓扑模型,利用已经搭建好的拓扑模型,进行后续的…

SOLIDWORKS如何新建定义材质库

SolidWorks材质库中包含了大量的材料选项,涵盖了金属、塑料、橡胶、复合材料等各种类型,每种材料都有详细的特性参数。用户可以根据设计需求,在材质库中选择合适的材料,从而更好地满足设计要求。在有限元分析中,需要附…

【架构师】-- 成长路线图

成长为软件架构师不是一件容易的事,这篇文章列举了架构师需要学习的技术储备,给出了成为软件架构师的路线图,帮助有志于在架构领域成长的同学可以明确学习的方向。原文:Master Plan for becoming a Software Architect[1] 软件架…

easyExcel - 动态复杂表头的编写

目录 前言一、情景介绍二、问题分析三、代码实现方式一:head 设置方式二:模板导出方式三:自定义工具类 前言 Java-easyExcel入门教程:https://blog.csdn.net/xhmico/article/details/134714025 之前有介绍过如何使用 easyExcel&…

LeetCode_144(二叉树前序遍历)

1.递归 public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res new ArrayList<>();accessTree(root,res);return res;}public void accessTree(TreeNode root,List<Integer>res){if(root null){return;}res.add(root.val);acce…

Redis 八种常用数据类型常用命令和应用场景

5 种基础数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散列&#xff09;、Zset&#xff08;有序集合&#xff09;。 3 种特殊数据类型&#xff1a;HyperLogLog&#xff0…

计算机视觉——Python OpenCV BGR转HSV

这里将介绍如何使用 OpenCV 与 Python 来作彩色影像转HSV(RGB to HSV 或 BGR to HSV)&#xff0c;在写 Python 影像处理程序时常会用到 OpenCV cvtColor 作颜色空间转换的功能&#xff0c;接下来介绍怎么使用 Python 搭配 OpenCV 模块来进行 RGB/BGR 转 HSV 彩色转HSV空间。 H…

03 Php学习:echo 、 print 、EOF

echo 和 print 在 PHP 中有两个基本的输出方式&#xff1a; echo 和 print。 echo 和 print 区别: echo - 可以输出一个或多个字符串print - 只允许输出一个字符串&#xff0c;返回值总为 1 注意&#xff1a;echo 输出的速度比 print 快&#xff0c; echo 没有返回值&…

VS Code开发插件使用 pnpm 打包异常的解决姿势

前言 刚刚准备发一个插件&#xff0c;发现用 pnpm 打出一个本地插件包直接扑街了。 这里只聚焦错误问题的解决&#xff0c;不是发插件的教程。。 聊点背景信息&#xff0c;vscode 的插件命令行的是 vsce 这个模块提供的 cli 能力去做的 环境 pnpm : 8.x 错误截图 本地打…

C++ Virtual详解

Virtual是C OO机制中很重要的一个关键字。只要是学过C的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数&#xff08;例如函数print&#xff09;&#xff0c;于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。当基类Base的指针point指向…

LRU算法的实现

目录 一&#xff0c;LRU算法 二&#xff0c;使用场景 三&#xff0c;LRU算法实现 一&#xff0c;LRU算法 LRU-least recently used-最近最少使用算法&#xff0c;是一种内存数据淘汰策略&#xff0c;使用常见是当内存不足时&#xff0c;需要淘汰最近最少使用的数据。LRU常用…