Python Selenium UI自动化测试

2023-11-13

1、自动化测试基础

1.1 自动化测试的定义

  • 将人为的测试行为转化为机器自动执行的过程

1.2 自动化测试的目的

  • 减少成本,提高测试效率
  • 减少人为因素对测试的影响

1.3 什么项目适合做自动化测试

  • 项目界面稳定
  • 需求明确
  • 项目周期长
  • 测试脚本可以重复使用
  • 需要频繁地进行回归测试

1.4 难点

  • 对比手工UI测试,UI自动化测试有如下的难点:

1)UI本身的变化性,要想达到和手工测试相同的覆盖率,单纯的UI自动化测试往往很难 证明自己的投资回报; 2)UI控件元素本身识别的复杂性;

3)UI自动化测试出现问题时,恢复到下一条测试case执行的场景是复杂的。因为出现 这种问题的意外,是非“预期”的;

2、搭建自动化测试环境

2.1 安装python

2.2 安装selenium

# 安装Selenium的最新版本

pip install selenium

# 安装Selenium指定版本

pip install selenium==2.53.0

2.3 下载webdriver驱动

以chrome浏览器为例

  • 查看chrome浏览器版本:在地址栏输入 chrome://version

  • chromedriver下载地址:http://chromedriver.storage.googleapis.com/index.html
  • 下载与浏览器版本对应的chrome driver
  • 将下载好的chrome driver 解压,并放至到Python安装路径的根目录 (安装路径随意一个都行)

2.4 第一个自动化测试脚本

  • 打开浏览器
  • 访问百度首页

from selenium import webdriver # 导入webdriver

d = webdriver.Chrome() # 创建浏览器对象,此方法需要提前将webdriver驱动添加到系统环境变量

d.get('https://www.baidu.com') # 调用get方法访问百度首页

d.close() # 关闭浏览器

3、webdriver API

3.1 浏览器操作

3.1.1 浏览器最大化

  • driver.maximize_window()

3.1.2 设置浏览器的宽和高

  • driver.set_window_size(480,800)

3.1.3 控制浏览器前进、后退

  • 前进: driver.forward()
  • 后退: driver.back()

3.1.4 关闭浏览器

  • 关闭当前窗口: driver.close()
  • 关闭浏览器: driver.quit()

3.1.5 浏览器刷新

  • driver.refresh()

3.1.6 获取当前URL

  • driver.current_url

3.1.7 获取当前title

  • driver.title

3.1.8 浏览器截图

  • driver.save_screenshot(图片路径)

--路径参数必填

--图片格式必须为png

3.2 元素定位

3.2.1 常见的属性

  • class:元素的类名
  • id:元素的唯一id
  • name:元素名,大部分情况唯一

3.2.2 八大元素定位方法

  • 元素定位和操作是自动化测试的核心部分
  • 一个元素就像一个人,有自己的特征(属性)
  • webdriver提供了一系列的元素定位方法,常用的有下面几种:
    • id:根据元素id值
    • name:根据元素name值
    • class name:根据元素class值
    • tag name:根据元素标签名字
    • link text:根据超链接的文本内容
    • partial link text:根据超链接的部分文本内容
    • xpath:根据xpath
    • css selector:通过css定位

xpath定位

语法

/ :从根节点选取(绝对路径)

// :从当前节点选取,不考虑节点的位置(相对路径)

.. :选取当前节点的父节点 搜索框的上两级父节点: //*[@id='kw']/../..

@ :选取属性

举例:

相对路径: //div[@class='entry-sider-panel']/section[@class='entry-sider-panel__bd']/div/div[1]

CSS定位
语法
#:选取id属性,#kw
.:选取class属性
[]:选取其他属性,如:[id='xx']

> :层级选取,如:#form>span>input

举例:div.entry-sider-panel>section.entry-sider-panel__bd>div>div:nth-child(1)

3.3 元素操作

3.3.1 输入内容

send_keys()

3.3.2 点击元素

click()

3.3.3 清空元素文本内容

clear()

3.3.4 获取元素文本

text

  • 返回的是字符串

3.3.5 获取元素尺寸

size

  • 返回的是字典

3.3.6 获取元素的属性值

get_attribute('属性值') --如id,class

4、设置等待时间

4.1 强制等待

sleep()

  • 需要先导包,import time

4.2 隐式等待

driver.implicitly_wait(秒)

  • 智能等待是在等待周期内一直等待元素是否出现,如果元素出现则继续,元素在等待周期内没有出现则报错
  • 推荐等待时间:10-30秒
  • 隐式等待只需设置一次就可以对整个脚本文件生效

4.3 显式等待

显式等待使WebdDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常

示例代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("http://www.baidu.com") # 每隔 0.5s 检查一次(默认就是 0.5s), 最多等待 5 秒
element = WebDriverWait(driver, 5, 0.5).until( EC.visibility_of_element_located( (By.ID, "kw")
) )
element.send_keys('selenium')
driver.quit()

5、滚动条操作、下拉框操作

5.1 操作滚动条

注意:操作滚动天是通过js操作的,不是通过selenium操作的

方法一:

from selenium import webdriver

from time import sleep

driver = webdriver.Chrome()

driver.get('https://www.baidu.com')

driver.set_window_size(688,476)

sleep(1)

js = 'window.scrollTo(0,10000)' # 拖动到底部

driver.execute_script(js) # 执行js命令

sleep(1)

js2 = 'window.scrollTo(10000,0)' # 从左拖到右

driver.execute_script(js2)

sleep(1)

js3 = 'window.scrollTo(10000,10000)' # 拖到右下角

driver.execute_script(js3)

sleep(2)

driver.quit()

方法二(推荐):

target = self.element(self.locators['product_des']) # 定位到目标元素
self._driver.execute_script("arguments[0].scrollIntoView();", target) # 滚动条滑动到目标元素

5.2 操作下拉框

方法一:二次定位,先定位到下拉框,然后通过里面的值进行定位

方法二:通过select库进行操作

示例代码:

from selenium import webdriver
from time import sleep
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()

driver.get('file:///C:/Users/Eccang/Desktop/test.html')
sleep(1)
# 方法一
# 二次定位
m = driver.find_element_by_id('abc') # 先定位到下拉框
# m.find_element_by_xpath("//*[@value='p1']").click() # 再定位一次选择里面的选项
# 方法二
Select(m).select_by_index(1) # 根据索引值选择
sleep(1)
Select(m).select_by_value('p2') # 根据值选择
sleep(1)
Select(m).select_by_visible_text('深圳') # 根据可见文本选择

6、多窗口处理、弹框处理

6.1 多窗口处理

根据窗口的handle值进行切换

获取当前窗口handle值:driver.current_window_handle

获取所有窗口handle值:driver.window_handles

根据handle值切换窗口:driver.switch_to.window(窗口handle值)

6.2 弹框处理

点击确定:driver.switch_to.alert.accept()

点击取消:driver.switch_to.alert.dismiss()

弹框中输入文本:driver.switch_to.alert.send_keys()

获取弹框中的文本内容:driver.switch_to.alert.text

7、框架切换、文件上传

7.1 框架切换

切换框架:driver.switch_to.frame(id/name)

返回默认框架:driver.switch_to.default_content()

7.2 文件上传

对于通过input标签实现的上传功能,可以将其看作是一个输入框,即通过 send_keys()指定本地文件路径的方式实现文件上传

对于非 input 标签实现的上传功能,我们可以通过模拟键盘敲击的方式实现,代码如下:

import win32com.client # 导入Windows API模块

driver.find_element_by_css_selector("#top .icon").click()
sh = win32com.client.Dispatch("WScript.shell")
time.sleep(3)
sh.Sendkeys("C:\\Users\Downloads\f89860fb73c0ba14c9b88845eb10b928.jpeg\n")

8、浏览器无头模式

chrome_options = Options() # 开发者模式,防止被各大网站识别出来用了selenium
chrome_options.add_argument('--headless') # 添加谷歌无头浏览器模式

driver=webdriver.Chrome(options=chrome_options) # 谷歌无头浏览器模式

9、单例模式

单例模式:单例模式就是确保一个类只有一个实例.当你希望整个系统中,某个类只有一个实例时,单例模式就派上了用场

由于在做web UI测试的时候需要浏览器对象,在实际写脚本的过程中可能会遇到只要调用一次webdriver就会生成一个浏览器对象,此时我们可以用到单例模式来处理(或者自己写一个判断语句也是可以处理的)。具体实现代码如下:

后续有时间会补充一些写自动化测试用例过程中需要用到的分层思想,已经一些测试用例、脚本关联、数据处理方面的东西。。。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python Selenium UI自动化测试 的相关文章

随机推荐

  • 作业2018.12.9日,第1题:使用循环输出:100、95、90.....10、5

    使用循环输出 100 95 90 10 5 int n 100 while n gt 0 if n 5 0 System out println n n
  • 就是这么简单!破解激活AutoCAD 2019 for mac v2019.0.1(附图文讲解)

    AutoCAD是大家都熟悉的软件了 广泛应用于机械设计 工业制图 工程制图 土木建筑 装饰装潢 服装加工等多个行业领域 使用Mac的朋友 AutoCAD 2019 Mac支持演示的图形 渲染工具和强大的绘图及三维打印功能 让您的设计将会更加
  • 第20章:python自动化——关键字驱动类实现

    目录 一 关键字驱动设计模式介绍 二 关键字驱动设计模式原理 三 关键字驱动设计模式代码实现 1 逻辑代码web keys py文件内容 2 测试代码web test py文件内容 四 总结 一 关键字驱动设计模式介绍 在自动化测试中 分为
  • PCL 点云投影到直线(C++详细过程版)

    目录 一 算法原理 二 代码实现 三 结果展示 1 原始点云 2 投影结果 一 算法原理 直线方程有三种表示法 一般式 点向式 参数式 PCL中统一采用的是点向式 直线的点向式方程为 x x 0 m y
  • 星星之火:国产讯飞星火大模型的实际使用体验(与GPT对比)

    AIGC技术内容创作征文 全网寻找AI创作者 快来释放你的创作潜能吧 文章目录 1 前言 2 测试详情 2 1 文案写作 2 2 知识写作 2 3 阅读理解 2 4 语意测试 重点关注 2 5 常识性测试 重点关注 2 6 代码理解与生成
  • 【17 > 分布式接口幂等性】1. 概述与接口重试的问题

    一 本章概述 二 接口幂等性 2 1 定义 2 2 运用场景 2 3 保证幂等性的策略有哪些 2 4 如何实现 2 5 如何操作 一 本章概述 什么是幂等性 幂等性设计的 核心思想 select updates delete insert
  • HTML的列表标签,表格标签

    前端学习经验 3 HTML 列表标签 li 此标签定义列表项目 用于有序列表 ol 和无序列表 ul 中 无序列表标签 ul 无序列表 ul 此标签定义无序列表 例 ul li 无序列表1 li li 无序列表2 li li 无序列表3 l
  • C#驱动ESP32控制机器臂

    物料清单 介绍 NET nanoFramework 是一个免费的开源平台 可以为受限嵌入式设备编写托管代码应用程序 它适用于多种类型的项目 包括物联网传感器 可穿戴设备 学术概念验证 机器人技术 业余爱好者 创客创作甚至复杂的工业设备 通过
  • 【VTK】FindPokedRenderer函数

    最近写VTK的响应程序发现鼠标响应函数最后都会有InvokeEvent函数 部分有FindPokedRenderer 对这两个函数的运行机制还不是很了解 现在具体介绍一下 1 FindPokedRenderer 作为actor的管理工具 还
  • 基于linux下的dm9000网卡移植全分析

    DM9000可以直接与ISA总线相连 也可以与大多数CPU直接相连 Mini2440采用的是dm9000直接连接CPU s3c2440 上 就像是nandflash一样直接被挂在CUP上 被挂在s3c2440的bank4上 小插曲1 s3c
  • web项目部署到某云Linux服务器的详细步骤

    一 安装xshell 和 xftp 1 xshell连接服务器 方式有几种 这里只介绍其中之一 在 某云 密钥对创建密钥对 然后会得到下载的密钥对文件 打开xshell 打开 新建 上图中的主机填某云 实例 中的 然后在xshell 用户身
  • Python3,Pandas这4种高频使用的筛选数据的方法,不得不说,确实挺好。

    Pandas数据筛选方法 1 引言 2 4种高频使用数据筛选方法 2 1 布尔索引 2 2 isin 方法 2 3 query 方法 2 4 loc 方法 3 总结 1 引言 小屌丝 鱼哥 share一下 数据筛选的方法呗 小鱼 Excel
  • 精度 vs 效率:模型越小,精度就一定越低吗?

    导语 深度学习是否朝着正确的方向发展 以下是我最近在伦敦 O Reilly AI Conference 和 DroidCon 上的两次谈话的改编 今年早些时候 NVIDIA 的研究人员发布了 MegatronLM 这是一个拥有 83 亿个参
  • 东方财富choice金融终端研究笔记

    东方财富choice金融终端研究笔记 最近在研究 东方财富choice金融终端 我就搞不懂了 他们弄这个东西是存心不让人懂的吗 说明PDF第四页 方式一 使用激活工具 适用于有图形界面 根据所用系统环境 运行接口激活工具LoginActiv
  • 第一节:Keras深度学习框架之环境搭建

    请在学习本节前阅读我们之前的预热课程 卷积神经网络的框架解读 上 BBM的开源HUB的博客 CSDN博客 卷积神经网络的框架解读 下 BBM的开源HUB的博客 CSDN博客 从本节开始 我们将进入到Keras的详细介绍和代码精读 为开始我们
  • 02-编写单个字节设备模块的驱动套路

    目录 1 单字节设备和多字节设备的区别 2 单字节设备 LED设备驱动 的驱动套路 2 1 头文件 2 2 定义设备驱动相关的变量 2 3 编写file operations 相关操作的函数 2 3 1 open函数 2 3 2 relea
  • matlab做角谱传播代码_AI

    运筹OR帷幄 转载 作者 机器之心 编者按 对python语言有所了解的人都知道Numpy这个数学处理工具包 而它在机器学习中也有很重要的地位 通过合理的使用Numpy这个工具 可以简单快速地搭建模型的数学计算流程 可以说是一把 利剑 普林
  • 阿里云:网络编程 bind:cannot assign requested address errno:99 问题

    解决方案 阿里云上的服务器代码绑定的 IP 需要时内网 IP ifconfig 查看 其他客户端连接服务器时所用的 IP 得是阿里云的外网 IP 查看实例即可 分析思路 猜想1 bind cannot assign requested ad
  • 解决“Pycharm中用Install Package 安装第三库出错”问题的经验

    1 问题描述 在PyCharm中通过Install Package 安装第三库 requests 报错了 但是可以通过终端Terminal可以安装 报错信息如图 2 问题分析及方法对策 根据我自己的经历以及网上搜寻所得 大致总结出如下原因
  • Python Selenium UI自动化测试

    1 自动化测试基础 1 1 自动化测试的定义 将人为的测试行为转化为机器自动执行的过程 1 2 自动化测试的目的 减少成本 提高测试效率 减少人为因素对测试的影响 1 3 什么项目适合做自动化测试 项目界面稳定 需求明确 项目周期长 测试脚