自动化测试-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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

体验Humane AI:我与可穿戴AI别针的生活

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

PMDM-针对特定口袋的分子扩散生成模型

Pocket based Molecular Diffusion Model (PMDM) 模型 是 腾讯AI lab 2023年发表在预印本上的文章,第一作者为Huang Lei。文章链接:https://www.biorxiv.org/content/10.1101/2023.01.28.526011v1.full.pdf 当前,该文章已经正式发表在nature…

数据结构--循环队列

1.队列的定义: 和栈相反,队列(queue)是一种先进先出(first in first out,缩写为FIFO)的线性表.它只允许在表的一端进行插入,而在另一端删除元素. 在队列中,允许插入的一端叫做队尾(rear),允许删除的一端则称为队头(front). 2.循环队列的设计图示: 3.循环队列的结构设计: ty…

OpenHarmony实例应用:【常用组件和容器低代码】

介绍 本篇Codelab是基于ArkTS语言的低代码开发方式实现的一个简单实例。具体实现功能如下: 创建一个低代码工程。通过拖拽的方式实现任务列表和任务信息界面的界面布局。在UI编辑界面实现数据动态渲染和事件的绑定。 最终实现效果如下: 相关概念 低代…

Normalization

Norm介绍 归一化层,目前主要有这几个方法,Batch Normalization(2015年)、Layer Normalization(2016年)、Instance Normalization(2017年)、Group Normalization(2018年&…

11 Php学习:函数

PHP 内建函数Array 函数 PHP Array 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。 创建 PHP 函数 当您需要在 PHP 中封装一段可重复使用的代码块时,可以使用函数。下面详细解释如何创建 PHP 函数并举例说明。 创建 PHP 函数的语法 PHP 函数的基…

数字化时代:IT界的致富秘籍 —— 策略×态度×机遇

🌟 数字化时代:IT界的致富秘籍🚀 —— 策略态度机遇 在数字化浪潮中冲浪🏄‍♂️,IT行业犹如一片无限可能的蓝海。想要在这片汹涌的海洋中捕获财富,不是一件轻而易举的事。让我们一起深入探索,如…

商标没有去注册有哪些不好的影响!

有些商家咨询普推知产老杨,商标没有去注册有哪些不好的影响,其实对企业来说还有许多实际不利的影响,有时代价比注册一个商标要大很多。 想的商标名称没去注册商标,如果别人抢注拿下商标注册证,那就会涉及侵权&#xf…

Cascader 级联选择器 - 选择器最后一级数据为空

原因:将扁平数据转化为树形数据时,给每个项都添加了 children export const transList2Tree (list, rootPid) > {const result []list.forEach(item > {if (item.pid rootPid) {const children transList2Tree(list, item.id)item.children …

Docker 学习笔记(八):Dockerfile实战篇,制作 Tomcat 镜像,发布镜像到 DockerHub 和阿里云

一、前言 记录时间 [2024-4-13] 系列文章简摘: Docker 学习笔记(六):挑战容器数据卷技术一文通,实战多个 MySQL 数据同步,能懂会用,初学必备 Docker 学习笔记(七)&#x…

暴雨孙辉:做好服务器,但更要辟出技术落地之道

稳扎稳打一直是暴雨的风格,这在被访者孙辉的身上尽显。作为暴雨(武汉暴雨信息发展有限公司)中国区销售及市场副总裁,在谈及公司的技术发展与市场推广走势之时,孙辉沉稳、敏锐且逻辑清晰。 因在服务器领域起步很早&…

mysql中的DML、DQL、DCL常用命令

文章目录 DML语句1.添加数据(INSERT)2.修改数据(UPDATA)3.删除数据(DELETE) DQL语句1.基础查询2.条件查询3.聚合函数4.分组查询5.排序查询6.分页查询 DCL语句1.管理用户2.权限控制 DML语句 1.添加数据(INSERT) 1.给指定字段添加数据:INSERT INTO 表名(字段1,字段2…