基于selenium实现UI自动化

2023-11-05

目录

一、Selenium简介

1、Selenium工具组件介绍

2、Selenium WebDriver 介绍及实现原理

二、Selenium WebDriver基于Python实现脚本

1、Selenium 环境安装

2、Selenium 操控浏览器的常用操作

3、编写一个简单的Selenium脚本

三、自动化测试框架 及 架构设计 的选择

1、基于Python语言比较流行的测试框架

2、PO设计模式


一、Selenium简介

        Selenium 是一款基于Web应用程序自动化测试的工具集合,Selenium 测试直接运行在浏览器中,本质是通过驱动浏览器,模拟用户的操作。工具的主要功能包括:测试与浏览器的兼容性,进行系统功能测试。

1、Selenium工具组件介绍

  • Selenium IDE是嵌入到FireFox浏览器的插件,用于在Firefox上录制和回放Selenium脚本,虽然只能在Firefox下使用,但它能将录制好的脚本转换成各种Selenium WebDriver支持的程序语言,进而扩展到更广泛的浏览器类型;

  • Selenium RC主要由两部分组成:selenium Server+Client Libraries;其中Selenium  Server负责控制浏览器的行为,而Client Libraries则是给测试人员编写测试案例时用来控制selenium Server的库。Selenium RC也被称为Selenium 1后来和WebDriver合并带来Selenium 2;在Selenium 3.0版本中Selenium RC已经不存在。

  • Selenium WebDriver:用于操作浏览器的一套API;可支持多种语言,支持各类型浏览器,跨操作系统,WebDriver为诸多语言提供完备的,用于实现web自动化测试的第三方库;Selenium WebDriver目前包括两个版本Selenium 2和Selenium 3。

  • Selenium Grid:是一种动态工具,它可以在多个物理/虚拟机中并发地分发和运行Selenium测试。可以显著加快跨不同浏览器的测试进程,并通过提供快速和准确的结果来缩短测试周期。

2、Selenium WebDriver 介绍及实现原理

        Selenium WebDriver 是业界通用的测试框架,不仅是web测试的标准,同时在移动测试领域也是底层的核心驱动框架

  • 特点:

    • 1、支持多浏览器操作:Chrome、IE、Firefox、Safaria等

    • 2、支持夸平台:Windows、Linux、Mac等

    • 3、支持多语言:Python、Java、Ruby、C#等

  • Selenium脚本执行时后端实现的流程:

    • 1.对于每一条Selenium脚本指令,都会创建一个HTTP请求并且发送给浏览器的驱动

    • 2.WebDriver启动浏览器驱动程序,建立HTTP Server,用来接收这些http请求

    • 3.HTTP Server接收到请求后根据请求来具体操控对应的浏览器

    • 4.浏览器执行具体的测试步骤,将步骤执行结果返回给HTTP Server

    • 5.HTTP Server又将结果返回给Selenium的脚本,如果是错误的http代码我们就会在控制台看到对应的报错信息

  • WebDriver是按照Client/Server模式设计的

    • Client:编程语言客户端;

    • Server:浏览器驱动程序。用来接收客户端的请求并驱动浏览器执行操作,然后返回结果;

  • WebDriver基于的协议:JSON Wire protocol

    • JSON Wire protocol是在http协议基础上,对http请求及响应的body部分的数据的进一步规范。body部分主要传送具体的数据,而且在WebDriver中这些数据都是以JSON的形式存在并进行传送的。所以在Client和Server之间,只要是基于JSON Wire Protocol来传递数据,同一个浏览器的驱动就可以处理不同语言的脚本。

二、Selenium WebDriver基于Python实现脚本

1、Selenium 环境安装

  • 安装selenium

    • pip install selenium

  • 安装WebDriver驱动程序

    • 驱动程序需要和对应的浏览器版本以及selenium版本相对应

      • Firefox 浏览器驱动:Firefox

      • Chrome 浏览器驱动:Chrome

      • IE 浏览器驱动:IE

      • Edge 浏览器驱动:Edge

      • PhantomJS 浏览器驱动:PhantomJS

      • Opera 浏览器驱动:Opera

    • WebDriver驱动安装路径

      •  Win:复制webdriver到Python安装目录下

      •  Mac:复制webdriver到/usr/local/bin目录下

2、Selenium 操控浏览器的常用操作

  • 页面基础操作

    • 获取网址:get(url)

    • 窗口最大化:maximize_window()

    • 窗口最小化:minimize_window()

    • 后退、前进、刷新:back()、forword()、refresh()

    • 关闭浏览器:quit()

    • 网页标题:title

    • 网页URl:current_url

    • 窗口句柄

      • 当前窗口句柄:current.windows.handles

      • 所有窗口句柄:windows.handles

    • 当前页面源代码:page_source

    • 对当前页面进行截图:get_screenshot_as_file(path)

  • 元素八大定位方式

    • id定位:find_element_by_id()

    • name定位:find_element_by_name()

    • class定位:find_element_by_class_name()

    • link定位:find_element_by_link_text()

    • partial link定位:find_element_by_partial_link_text()

    • tag定位:find_element_by_tag_name()

    • xpath定位:find_element_by_xpath()

    • css定位:find_element_by_css_selector()

  • 元素等待的三种方式

    • 强制等待:通常使用在系统间的交互

      • time.sleep()

    • 隐性等待:全局设置,可以设置超时时间;只能用来等待元素

      • implicitly_wait()

    • 显性等待:等待某个元素可被点击、可见、窗口是否被打开;每次等待需要单独设置

      • WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

  • 三种切换方式

    • 窗口切换,窗口句柄

      • 获取窗口句柄:windowhandles[-1]

      • switch_to_window()

    • iframe切换

      • switch_to.iframe()

    • 弹窗切换 toast

      • switch_to_alert

  • 鼠标操作(在 webdriver 中 鼠标操作都封装在ActionChains类)

    • 点击:click()

    • perform() :执行所有ActionChains中存储的动作

      • 双击:double_click()

      • 拖拽:drag_and_drop()

      • 悬停:move_to_element()

      • 右击:content_click()

  • 下拉框操作

    • Select()

  • 用户输入、键盘操作、文件路径

    • send_keys()

  • 发送js指令(主要用于弥补selenium无法做到的特定页面操作)

    • 页面滚动(例如:滑动到页面底部)

    • 修改元素属性

  • 系统交互上传

    • Win:pywinauto

    • 跨平台:pyautogui

3、编写一个简单的Selenium脚本

  • 启动浏览器

  • get打开指定页面、进行元素定位和操作

from selenium import webdriver​


# 启动谷歌浏览器​
driver = webdriver.Chrome(executable_path=r"/Users/bytedance/Desktop/chromedriver")​
# 设置隐性等待​
driver.implicitly_wait(5)​

# 打开网页CSDN​
driver.get("https://www.csdn.net/?spm=1001.2101.3001.4476")​
# 定位"输入框"​
input_box = driver.find_element("xpath",'//*[@id="toolbar-search-input"]')​
# 输入文本:"Selenium自动化测试框架"​
input_box.send_keys("Selenium自动化测试框架")​
# 定位"搜索"功能并且点击​
driver.find_element("xpath",'//*[@id="toolbar-search-button"]/span').click()​


# 关闭浏览器​
driver.quit()
  • 使用 selenium 定位页面元素的前提是需要了解基本的HTML页面布局和各种标签含义,通过【F12】开发者工具,从页面源码中定位获取我们需要的元素;

    • 快捷方式:找到元素之后,可以右击Copy元素定位表达式。    

三、自动化测试框架 及 架构设计 的选择

1、基于Python语言比较流行的测试框架

        公共方法的封装及对脚本及配置文件怎么组织的设计就叫做框架。

  • Unittest: Python自带,最基础的单元测试框架

  • Nose: 基于Unittest开发,易用性好,有许多插件

  • Pytest: 同样基于Unittest开发,易用性好,信息更详细,插件众多

  • Robot Framework:一款基于Python语言的关键字驱动测试框架,有界面,功能完善,自带报告及log清晰美观

  • 总体来说,Unittest比较基础,二次开发方便,适合高手使用;Pytest/Nose更加方便快捷,效率更高,适合小白及追求效率的公司;Robot Framework由于有界面及美观的报告,易用性更好,灵活性及可定制性略差。      

2、PO设计模式

        对于一个优秀的框架,不可或缺的当属是分层思想,而在Web UI自动化测试中,PO模式(Page Object)是十分主流的一项技术;PO设计模式提供了一种页面元素定位和业务操作流程分离的模式。当页面元素发生变化时,只需要维护对应的page层修改定位,不需要修改业务逻辑代码。

  • PO核心思想是分层:实现脚本可复用性,易维护性,可读性,可扩展性;主要分三层:

    • 对象库层:Base(基类),封装页面一些公共的方法,如初始化方法、查找元素方法、点击元素方法、输入方法、获取文本方法、截图方法等。

    • 操作层:page(页面对象),封装对元素的操作,将一个页面封装成一个对象。

    • 业务层:business(业务层),将一个或多个页面操作组合起来完成一个业务功能测试。比如登录:需要输入帐号、密码、点击登录三个操作。

  • 基于分层思想和PO设计模式,我们可以设计出基本的框架模型:

    • cases测试用例层:存放所有的测试用例

    • common公共层:存放一些公共的方法,如封装page页面基类、捕获日志等

    • datas测试数据层:存放测试数据

    • logs日志层:存放捕获到的所有日志和错误日志,便于问题定位

    • pages页面对象层:存放所有页面对象,一个页面封装成一个对象

    • reports测试报告层:存放产出的测试结果数据,失败截图

    • run用例执行层:存放测试执行文件

    • requirements.txt:记录当前项目的所有依赖包及其精确版本号,以便后续迁移项目使用。

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

基于selenium实现UI自动化 的相关文章

随机推荐

  • 巴比特

    摘要 据钛媒体报道 当前市场对与内容相关的产品商业化的耐心不及以往 以至于 扎克伯格早早就为元宇宙设想好了商业化的落地场景 元宇宙方面 我们希望能够为用户提供更多业务帮助 比如通过聊天直接获取客户 直接对用户销售产品 提供客服帮助或再向用户
  • 国内NFT平台及玩法一览

    2021年被称为NFT的 元年 互联网巨头 各大企业 艺术家 明星纷纷入局NFT 屡创新高的NFT价格更是让其成为大众关注焦点 此推出NFT系列专题研究 盘点和总结NFT的发行市场 平台背景 投融资状况 市场热点 政策监管等相关内容 帮助读
  • c语言static关键字的理解

    static 一 概述 在c语言中static恰当的使用能让程序更加完美 细节上的严谨 代码会更好 也更利于程序的维护与扩展 而static使用灵活 且又有两种完全无关的用法 所以整理总结一下 二 static的两种用法 1 static修
  • Tomcat项目配置

    1 下载tomcat 版本 9 0 65 链接 https tomcat apache org download 90 cgi 2 解压tomcat tomcat直接解压就可以使用 解压后文件夹目录为 3 bin文件夹下 startup b
  • vue.js -- 全局组件&局部组件

    目录 vue组件 全局组件 组件定义 组件复用 组件的组件 局部组件 总结 vue组件 组件是 Vue js 最强大的功能之一 组件可以扩展 HTML 元素 封装可重用的代码 组件系统让我们可以用独立可复用的小组件来构建大型应用 几乎任意类
  • JAVA逻辑思维题(1)4个人过桥

    有4个女人要过一座桥 她们都站在桥的某一边 要让她们在17分钟内全部通过这座桥 这时是晚上 她们只有一个手电筒 最多只能让两个人同时过桥 不管是谁过桥 不管是一个人还是两个人 必须要带着手电筒 手电筒必须要传来传去 不能扔过去 每个女人过桥
  • vue ag-grid-vue 大数据动态加载服务器请求数据

    vue ag grid vue 渲染大数据表格 动态请求服务器数据设置子目录 目前只能是初始是一次性加载所有数据再分页渲染 还没有研究出滚动分页加载服务器 这个方法是一次加载所有数据在前端再做的分页渲染 点击目录文件展开能动态加载服务器的数
  • 计算机上应用锁,电脑怎么设置软件锁

    题主 针对这个问题有两个解决方案 一 设立两个账户 先创建一个用户 右键计算机 点管理 在弹出的对话框选择用户和组 选择用户 右键空白地方新建用户 设置密码等选项 新建完成关闭对话框 找到软件快捷方式或者软件图标 右键图标 选择属性 在跳出
  • 个人服务器环境搭建

    前言 文档创建时间 2022年12月1日14点26分 初衷 想搭建个人服务器 熟悉Linux的语言以及服务部署相关事情 主要方向可能是个人网站 公众号 小程序后台接口 之前有在免费的服务器上面搭建过 现在再次搭建顺便做个记录 前期准备 云服
  • 学习笔记(一):Windows和Ubuntu系统下的QGIS-python二次开发环境配置方法

    学习笔记 一 Windows和Ubuntu系统下的QGIS python二次开发环境配置方法 过程超级超级无敌详细 0 写在前面 1 Win10系统下QGIS python的开发环境配置 1 1 方法一 使用QGIS软件中的bat文件直接配
  • [Java基础系列第1弹]一文带你了解Java编程语言的精髓:特性、机制、环境和工具

    如果你是一个想要学习编程的新手 或者是一个想要提高编程技能的老手 那么Java编程语言是一个非常好的选择 Java是一种简单 面向对象 分布式 健壮 安全 跨平台 多线程和动态的编程语言 它可以用于开发各种类型和规模的软件应用 Java是目
  • 大厂经典Zookeeper面试题整理汇总

    1 ZooKeeper 是什么 ZooKeeper 是一个分布式的 开放源码的分布式应用程序协调服务 它是一个为分布式应用提供一致性服务的软件 提供的功能包括 配置维护 域名服务 分布式同步 组服务等 ZooKeeper 的目标就是封装好复
  • 在传统公司干IT是一种什么体验(三)

    我的同事人人都是福尔摩斯 我的一举一动都是他们的破案素材 表哥语录 表哥的公司特别重视细节 注重细节本来是一个良好的工作习惯 但是表哥公司的同事把细节用到了极致 可能也是一种内卷的表现 公司里的人基本都干了10年了 公司业务变化也不大 天天
  • 通过url下载文件和本地路径下载文件是不一样的!

    通过url下载文件 RequestMapping value download method RequestMethod GET public void getRequest HttpServletResponse response Str
  • 【微信小程序】从后台获取数据并赋值到数组,然后前端遍历使用。

    一 在 js文件的data里面创建一个空数组 用来存放后端返回的数据 Page data ToDoList 二 后端文件
  • WSL2 使用 docker

    一 下载docker 这篇文章发布的时候正式版的docker 仍然不支持docker wsl 因此需要下载edge 版本 下载地址 https docs docker com docker for windows edge release
  • 献给Python初学者,零基础学习Python能学会吗?

    零基础 学习 Python 能学会吗 这个问题几乎是所有初学Python的小白都会问到的问题 其实Python是非常适合初学者入门的 相较于其他主流类编程语言 Python具有更好的可读性 因此上手更容易 而且即便你是零基础也一样能学会 零
  • 【深度学习】(二)神经网络:激活函数、MNIST

    感知机需要人为设定符合预期输入输出的权重 神经网络可以自动地从数据中心学习到合适的参数 质朴感知机 指单层网络 激活函数使用了阶跃函数的模型 多层感知机 指神经网络 使用平滑的激活函数的多层网络 激活函数 激活函数是将输入信号的总和转换为输
  • sql语句中not in 不好使的原因之一

    场景说明 查询某表中的某字段的值没有在另外一个表中对应的字段中出现过 比如现在有两个表 一个产品表product 一个优惠券批次表coupon coupon中的product code字段与product中的product code形成一对
  • 基于selenium实现UI自动化

    目录 一 Selenium简介 1 Selenium工具组件介绍 2 Selenium WebDriver 介绍及实现原理 二 Selenium WebDriver基于Python实现脚本 1 Selenium 环境安装 2 Seleniu