web 自动化
基于 Python 3 + Selenium + unittest 的 UI 自动化
猫与测试
10+年软件测试及管理经验,3+年软件测试培训经验,曾工作于多家互联网、电子商务企业,擅长测试管理、各类自动化测试、Python 语言。
展开
-
Python 列表推导式
列表推导式,也叫列表生成式,是一种方便生成列表的语句。比如我们要将一个全是整数的列表中每个数取平方后放入新的列表,我们会这么写:li = [3, 6, 9, 11]# 定义一个空列表用来存储结果news = []# 将li中的元素挨个运算再添到结果列表for i in li: news.append(i*i)print(news)当然如果你会运用 map() 函数,...原创 2019-12-12 19:16:53 · 1279 阅读 · 0 评论 -
Python + Selenium PO 设计模式实践
在 Python 领域(Java 中 Selenium 提供了 page factory)中,由于没有官方或者说非常标准的实践模式,再加之 Python 又是一种支持函数式编程的语言,所以对 PO 的实践有很多实现方式。原创 2019-12-12 19:15:52 · 1439 阅读 · 2 评论 -
Python + Selenium 使用 unittest 编写自动化测试用例
我们使用之前演示过的 showdoc,编写一个登录的用例,并检查自定义项目是否存在。首先,我们把这个过程先罗列出来:打开登录页面选择登录输入用户名输入密码点击登录验证自定义项目是否存在由于这个项目登录后没有任何用户名标识,所以要想判断登录的账号是否正确,可以通过该用户下的项目来判断。import unittestimport timefrom selenium impo...原创 2019-12-11 22:09:25 · 1052 阅读 · 0 评论 -
Python + Selenium Page Object页面对象设计模式
前面提到过 UI 自动化测试最大的障碍或者成本最大的地方就在于页面的频繁变化。UI 自动化测试过于依赖于界面,界面变化意味着你的代码无法使用,需要更新维护。虽然我们可以通过选择更有效的用例来达到降低维护成本的目的,但是毕竟以涉及到 UI 元素变化,我们的代码就需要改变。目前 UI 自动化测试中最流行和达成共识的做法是是采用 Page Object (简称 PO) 设计模式,使用这种模式可以有效...原创 2019-12-11 22:09:11 · 753 阅读 · 0 评论 -
Python + Selenium结合 unittest 测试框架
如果你是学习网络爬虫,那么到这里就不用再继续看了。如果你是做自动化测试,那么接下来才是重点。关于 unittest 框架的用法,请参考Python 测试框架。前面我们一直在讲 Selenium 对各种操作的模拟,以及处理各种特殊页面元素和结构。虽然通过 assert 语句增加了一些预期结果与实际结果的判断,但是并未形成真正的自动化测试框架。通过对 unittest 框架的理解,已经了解了 P...原创 2019-12-11 22:08:54 · 465 阅读 · 0 评论 -
PySimpleGUI:快速开始
好,我们的第一个 GUI 程序用大家一般在 Python 学习阶段都用过的一个简单的模拟登录。预设账号和密码输入账号输入密码点击提交判断账号和密码是否匹配,都匹配则返回登录成功,否则登录失败。基本逻辑如下:user = input('请输入账号:')password = input('请输入密码:')if user == 'admin' and password == '12...原创 2019-11-26 16:11:29 · 2933 阅读 · 4 评论 -
Python + Selenium(二十七)WebDriver 原理
如果要精通一门工具,一定要了解其原理。在早期的 Selenium RC 加载浏览器后,它将JavaScript代码注入浏览器,通过 JavaScript 代码在浏览器中驱动自动化运行。Selenium WebDriver 使用每个浏览器的内置的自动化支持来直接驱动浏览器。这些自动化的支持来源于浏览器厂商,更原生更稳定。这些对浏览器的驱动来源于浏览器厂商遵循 WebDriver 中的 WP(W...原创 2019-11-20 14:04:26 · 563 阅读 · 1 评论 -
Python + Selenium(二十六)模拟手机浏览器
现在的 IT 以移动互联网为主,所以一般网站系统都会支持移动模式。移动设备与 PC 网页浏览区别最大的就是分辨率,大型网站为了体验使用移动设备访问时都会专门提供移动版本。而其他很多站点也是采用响应式设计,也可以支持移动设备以较好的访问。我们也需要测试网页在移动设备上的表现,而直接在手机上调用浏览器实现测试过程麻烦且受环境影响很大。我们可以通过在 PC 上模拟移动设备(主要是分辨率和 User-...原创 2019-11-20 14:04:13 · 4097 阅读 · 0 评论 -
Unittest-断言:判断测试结果
通过上一节,我们了解到如何编写一个测试用例。而测试用例中的核心就是如何判断预期与实际结果,自动化测试不像手工测试。手工测试时,根据手工用例执行并人工去判断结果是否符合预期;自动化测试时,需要用代码自动去判断。而代码中判断预期与实际的方式就是断言。Python 中内置了断言语句 assert。接逻辑判断表达式,通过逻辑表达式返回结果的 True 和 False 来辨别预期与实际是否相符...原创 2019-11-18 10:05:19 · 1882 阅读 · 1 评论 -
Python + Selenium(二十三)使用百度文字识别API识别验证码
上一节我们讲到验证码,通过图像识别的方式可以识别简单的验证码,所以识别对我们的意义不是特别大。不过我单独开这一节来讲,也算是扩充一些知识面,同时也可以练习一下关于 requests 的一些用法。对接口测试的理解也有很大的好处。首先我们需要注册百度开发者平台,并且认证。看这里注册好以后,创建应用并勾选文字识别服务(其实都可以勾起来玩一玩),文字识别服务分了几种,有完全免费的“通用文字识别”,每...原创 2019-11-13 09:13:48 · 765 阅读 · 0 评论 -
Python + Selenium(二十二)验证码
这是一张网易邮箱的验证码图片,验证码经常出现在我们登录的时候,下面是一段截取百度百科对验证码的介绍:验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票...原创 2019-11-13 09:13:32 · 440 阅读 · 0 评论 -
Python + Selenium(二十一)文件上传
对于自动化测试过程中去实现文件上传,我内心是拒绝的。目前网上很多资料谈到文件上传动辄谈 AutoIt,这是一款早期的 Windows 自动化工具,用来模拟 Windows 上的操作。这款工具已经十来年没有更新过了。先不谈使用这些工具实现上传是否靠谱,光说文件的上传过程。文件上传一般由如下过程构成:点击某个按钮,比如上传、浏览等浏览器会调用 Windows 的文件浏览对话框让用户选择文件...原创 2019-11-10 13:08:53 · 463 阅读 · 0 评论 -
Python + Selenium(二十)等待
为什么需要等待?自动化测试脚本在运行时,由于网络原因、机器卡顿、页面元素呈现等原因,导致定位失败。定位失败导致元素无法操作,获取不到用于断言的内容。最终在检查测试结果时就会出现很多因为这些原因而导致的测试失败,需要花大量精力来排查才能找到真正意义上的问题。所以必须要使用等待。其实 Selenium 是有默认等待的,当你打开页面时默认会等待页面元素加载完毕才进行元素定位。但是页面加载完毕后产生...原创 2019-11-10 13:07:47 · 557 阅读 · 0 评论 -
Python + Selenium(十九)截图
UI 自动化中截图必不可少,截图可以展现测试过程 ,也可以检查错误情况。甚至在某种情况下还可以通过截图对比来判断程序的正确性。自动化测试过程中 ,需要截图有以下几个用途:记录测试过程脚本发生异常或者失败情况时截图部分页面需要截图对比断言获取验证码图片用于验证码识别其他需要记录的情况Selenium 中提供的截图有两种截图方式。一种是截取当前浏览器窗口,第二种是截取可见元素。截取...原创 2019-11-08 23:11:16 · 677 阅读 · 0 评论 -
Python + Selenium(十八)弹出框
在 JavaScript 中可以创建三种消息框。这些消息框起到提示信息、确认操作、输入文本等操作。比如,经常我们会某些内容未输入,弹出一个提示框,告知你未输入完整;或者在操作页面的过程中,有部分重要或危险的操作(删除)会弹出一个框让你确认;亦或者提示你需要强制输入某些内容。这些由 JavaScript 生成的消息框,都有一个共有的特点:模态的。也就是你不处理这些消息框,将无法操作页面。对于 S...原创 2019-11-08 00:33:46 · 719 阅读 · 0 评论 -
Python + Selenium(十七)多窗口
首先我们先理解下什么是窗口的概念:浏览器的 window 概念,一个tab就是一个window。什么时候会产生多窗口:<a target="_blank" class="cate_menu_lk" href="//jiadian.jd.com">家用电器</a>target="_blank" 属性会在新窗口中打开链接地址。或者 JavaScript 代码:wi...原创 2019-11-03 12:48:36 · 842 阅读 · 0 评论 -
Python + Selenium(十一)随机测试案例
在进行 UI 测试时,一般来说我们都是编写固定的流程脚本,其中各种数据基本上都预先设定好,或者使用数据驱动的方式列出一部分数据。这种方式固然有其好处,但是毕竟失掉了一些覆盖度,造成数据选项覆盖不全面。可以在自动化测试过程中,引入一定的随机测试内容来实现一部分对流程影响不大的内容的随机性测试。可以增加同样代码情况下流程的覆盖。这里面会用到 Python 中的 random(随机函数库)。下面...原创 2019-11-02 21:02:43 · 1008 阅读 · 0 评论 -
Python + Selenium(十六)JavaScript调用
Selenium 中提供了很多定位元素、操作元素的方法,但是由于网页的开发形态各种各样,所以难免有些需求满足不了。当 Selenium 无法操作的情况下,就需要通过 JavaScript 来辅助了。在 WebDriver 中提供了执行 JavaScript 的方法:execute_script(script, *args),JavaScript 代码以字符串的形式构建,然后传给该方法执行。参...原创 2019-11-01 14:57:59 · 1339 阅读 · 0 评论 -
Python + Selenium(十五)内嵌页面 iframe/frame
先看一个例子:这是 163 邮箱登录页面,我们想模拟一下邮箱登录。driver.find_element_by_name('email').send_keys('nemo')额,报错了!Selenium 告诉我们:Message: no such element: Unable to locate element。检查定位方式对的啊,name 属性嘛。可为什么就是要报错呢?仔细观察页...原创 2019-11-01 09:18:17 · 8718 阅读 · 0 评论 -
Python + Selenium(十四)下拉菜单处理
传统的下拉菜单 Select 元素,由一个 Select + 一系列的 option 元素构成。<select id="source" name="source"> <option value="">--请选择--</option> <option value="1001">网络营销</option> <option val...原创 2019-10-30 11:12:06 · 1318 阅读 · 1 评论 -
Python + Selenium(十三)鼠标操作-链式操作
当你需要执行复杂的操作时,比如将一个元素按住拖动到另一个元素上去,需要移动鼠标然后点击并按下键盘某个按键等等。当然,在 Web 页面上,这种操作好像比较少。但是,如果遇到了怎么办呢?这就需要用到 ActionChains 这个类啦。ActionChains 提供了对动作的链式操作,也就是可以生成一个操作的队列,将复杂的操作过程分解成单个操作,然后组合起来一次性执行。这里面主要是鼠标操作,加...原创 2019-10-28 09:28:41 · 2499 阅读 · 0 评论 -
Python + Selenium(十二)键盘操作
Keys 类对键盘按键进行了定义,结合 send_keys() 方法可以向页面元素发送各种键盘按键。比如在京东首页的搜索框,输入查询的内容后,再按一次回车。这是我们大部分人操作搜索的过程。from selenium.webdriver.common.keys import Keys # 引入keys类…# 打开京东过程省略driver.find_element_by_id("key")....原创 2019-10-27 21:55:18 · 641 阅读 · 0 评论 -
Python + Selenium(十)元素对象操作
WebElement 是 WebDriver 中另一个重要的类,通过 find_element() 方法找到的元素对象就是 WebElement 类型。WebElement 中定义了页面元素对象的操作方法。比如点击click(),输入文本send_keys()。常用操作元素点击找到元素后可以对元素进行点击,模拟的是鼠标单击操作。driver.find_element_by_id('su'...原创 2019-10-25 09:28:20 · 3225 阅读 · 0 评论 -
Python + Selenium(九)元素定位函数 find_element
CSS(Cascading Style Sheets)是一种语言,用来描述HTML和XML文档的样式。CSS 选择器用来定位 HTML 上的元素,然后对其进行渲染。通过 CSS 选择器可以定位到页面上的任意元素。这些选择器可以被 WebDriver 用作另外的定位策略。CSS 可以较为灵活的选择控件的任意属性,一般情况下定位速度比后面要讲的Xpath 快。目录语法简介通过class属性定...原创 2019-10-22 21:14:20 · 47543 阅读 · 0 评论 -
Python + Selenium(八)网页元素定位(七)CSS 选择器
CSS(Cascading Style Sheets)是一种语言,用来描述HTML和XML文档的样式。CSS使用选择器来为页面元素绑定属性。这些选择器可以被WebDriver用作另外的定位策略。CSS可以较为灵活的选择控件的任意属性,一般情况下定位速度比后面要讲的Xpath快。Selenium官方推荐使用CSS进行定位。要使用CSS进行定位,就需要熟悉CSS选择器的语法:选择器 例子 ...原创 2019-10-20 22:36:15 · 2594 阅读 · 0 评论 -
Python + Selenium(七)网页元素定位(六)Xpath
前面讲的定位方式,都能够很方便的定位到网页元素。但是这些属性并非所有的网页元素都具备,可以这么说,绝大部分情况下都很难保证元素具备这些属性。也就是很多时候需要使用其他的方式来定位,在 WebDriver 中提供了 Xpath 和 Css 选择器两种语言来辅助定位。这两种语言都很强大,能够定位网页上的任意元素。在网络爬虫中,也通常会用借助 lxml 库使用 Xpath 进行网页的解析。目录什么...原创 2019-10-19 17:54:24 · 3694 阅读 · 0 评论 -
Python + Selenium(六)网页元素定位(五)标签名和链接文本定位
tag nametag name 为标签名定位,使用网页元素的标签名如a, div, input, span 等。但是有一个问题,常见的标签名比如 在同一个页面上有非常多。会不会觉得 tag name 没什么用呢?当然普通的模拟操作是不大有用,这个重复性实在太高了。但是在某些特殊情况下,比如需要使用 body、html、head 这些元素的时候, tag name 就有用了。另外批量处理...原创 2019-10-18 10:32:45 · 4825 阅读 · 1 评论 -
Python + Selenium(五)网页元素定位(四)class name 定位
class name:HTML规定class来指定元素的类名,常用于css样式等。driver.find_element_by_class_name(“s_ipt”)用class属性来定位需要注意,class name并不唯一,且一个class属性中可能包含多个class name,如百度搜索按钮的class属性就是多个,注意观察,在"bg"和"s_btn"之间有空格,有空格就表示是两个类名...原创 2019-10-17 16:36:40 · 3544 阅读 · 1 评论 -
Python + Selenium(四)网页元素定位(三)name 定位
HTML 中的 name 属性,主要存在与 From 表单中。表单在网页中主要负责数据采集功能并将数据提交给服务器。一个表单有三个基本组成部分:表单标签:这里面包含了处理表单数据的接口地址以及数据提交到服务器的请求方法(GET,POST);表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等;表单按钮:包括提交按钮、复位按钮和一般按钮;用于将数据传...原创 2019-10-16 17:14:42 · 2009 阅读 · 0 评论 -
Python + Selenium(三)网页元素定位(二)id 定位
idHTML规定id属性在HTML文档中必须唯一,id属性可用于在JavaScript(通过HTML DOM)或CSS中针对给定ID来改变HTML元素。。因此id是一个类似身份证的概念,唯一性很强。但是这个唯一性要求也不是强制的,笔者以前就遇到过一个项目id并不唯一,当然这是个案;还有对于单选框(radio button),一般是一组input的元素,id值都是一样的。这两点在使用时需要注意。...原创 2019-10-15 10:08:11 · 1227 阅读 · 0 评论 -
Python + Selenium(二)网页元素定位(一)
现在我们就进入WebDriver的最重要部分,也是Selenium中的最重要部分,元素定位。我们做自动化测试,就是需要通过模拟手工对元素的操作来实现自动化。但是脚本的模拟又不像手工操作,你想操作哪个元素,鼠标放上去点击就可以了;对于脚本来说,必须要先找到对应的元素,才能对元素进行操作。首先,我们打开百度首页(http://www.baidu.com),在这个页面上有搜索的输入框、有搜索按钮、以及...原创 2019-10-15 10:05:34 · 650 阅读 · 0 评论 -
Python + Selenium(一)常用控制方法
Selenium 体系中用来操作浏览器的 API 就是 WebDriver,WebDriver 针对多种语言都实现了一套 API,支持多种编程语言。Selenium 通常用来做自动化测试,或者编写网络爬虫。通常我们说的 Selenium 自动化操作,指的就是 WebDriver 中提供的控制方法。一般我们讲 Selenium 多半都是在谈 WebDriver。Webdirver 中提供了对浏...原创 2019-10-14 17:16:44 · 523 阅读 · 0 评论 -
Pytest + Allure 实现高大上的测试报告
Pytest 是 Python 第三方的测试库。提供了比 unittest 更强大更灵活的测试机制。同时有众多的插件可以实现更多测试场景。对于 Pytest 的使用不展开来谈,以后会写关于 Pytest 库的使用教程。这里主要展示通过 pytest 和 allure 结合实现漂亮的测试报告。一份酷炫的报告,有助于提升自动化测试逼格。先来看看效果:但是这玩意用起来比较麻烦,在使用过程中有很...原创 2019-10-13 00:26:49 · 704 阅读 · 0 评论 -
Python + Selenium环境搭建
python 3 + selenium 环境搭建原创 2019-10-11 21:05:56 · 2925 阅读 · 1 评论 -
Selenium下载页面上的图片
当要获取页面上的图片,我们常规的做法是:在图片上点击鼠标右键,然后选择 图片另存为,弹出保存窗口,选择或输入保存的位置,点击 确定 按钮即可。在selenium3.0以前,我们是可以通过selenium+Autoit(或者pywinauto)的方式直接模拟这种操作:找到图片元素,使用鼠标ActionChains类中的context_click方法实现右键点击,使用键盘Keys...原创 2019-10-11 21:00:18 · 16291 阅读 · 1 评论