11.1 截图函数的正常使用

11.1.1 截图方法

无论是在手动测试还是自动化测试中场景复现永远是一个很重要的事情,有时候一些问题可能很难复现,这个都需要测试人员对bug有很高的敏感度,在一般的情况下有一个很好的测试习惯也很重要,发现bug马上截图,不要管那么多。下面我们看一下自动化测试截图的一些方法:

1、save_screenshot(). 这个方法的用户最直接driver.save_screenshot('test.png'),他直接是获取当前屏幕的截图,然后进行保存,可能会有人有疑问,这个不能指定目录吗?当然可以,只是你需要使用另外一个截图方法,如下

2、get_screenshot_as_file(filename) 用法和上面的有一些差别,这个需要指定文件夹driver.get_screenshot_as_file('png/test.png')。

截图方法常用的是这两个,其他的使用很少,这里不做讲解,如果有兴趣的可以去了解一下一个是以二进制,一个是以base64的形式获取。

11.2 以时间戳命名错误图片

11.2.1 时间戳命名图片

可能看到这里的人会觉得不懂,为什么我们需要用时间戳来命名,其实这个并不是我们的最终目的,这里是在给大家传递一个思想,你想想在自动化测试中你每个方法都有可能错误,而且每次运行都是在不同的地方出错,那么你这个命名如果按照上面的写死,那么永远只有一张图片,其他的图片找不到了,这个不符合我们设计时的思考,所以我们需要用不同的方式去,显然时间戳是一个不错的选择,只要出错,我们就截图,而且还能保证每张图的名字不一样,是不是感觉很nb,哈哈,开玩笑。

既然是以时间戳来进行命名,那么首先我们需要有一个获取时间戳的方法,要把它封装好,因为调用这个的地方会很多,所以要进行封装。

import time
def getTime(self):
tamp = int(time.time())
return tamp

  上面的方法便是我们封装的获取时间戳的方法,我这里使用了一个返回函数,每次当我们调用的时候我们就能够获取到当前的时间戳。接下来看一下在实际中我们如何将时间戳使用到截图方法中:

import time
#获取时间戳,并当作图片名字
def getTime(self):
tamp = int(time.time())
filename = '../jpg/ %s.png' %tamp
self.driver.get_screenshot_as_file(filename)

  看见上面的代码是不是很简单啊,但是不知道你们思考过一个问题没,是不是怎么看怎么觉得别扭啊?接着往下看。

11.3 截图功能的封装

11.3.1 截图功能封装实战

上面的代码越来越别扭,哈哈,我也是那么觉得的,下面看一下截图功能在实际中的封装,其实和上面差不多,只是需要养成一个习惯,尽可能的将同一类功能封装到一个方法中,so,如下:

import time
#截图
def getScreenShot(self):
time = self.getTime()
filename = '../jpg/ %s.png' %time
self.driver.get_screenshot_as_file(filename) #获取时间戳
def getTime(self):
tamp = int(time.time())
return tamp

  

看到这个是不是稍微好一点点呢?其实这个呢只能算是入门的,那么在实际项目中我们到底是怎么进行的呢?大家下去思考一下。

  我看着上面的代码模糊,总感觉这个driver哪里来的呢?是不是又忘记了呢?还记得我们return driver了么?

提示:在实际项目中我们的截图封装一般会和我们当前的case有关系,基本是按照case执行的来进行命名,那样在图片页面就能够一目了然的指导这个图片是哪个地方出错的。去动手尝试一下吧。

Appium python自动化测试系列之自动化截图(十一)的更多相关文章

  1. Appium python自动化测试系列之混合app实战(十一)

    12.1 什么是混合App 12.1.1 混合app定义 什么是混合app,其实这个不言而喻,我们的app正常来说应该都是native的,但是实际工作中却不是,反正种种原因我们的app会有native ...

  2. Appium python自动化测试系列之移动自动化测试前提(一)

    1.1 移动自动化测试现状 因为软件行业越来越发达,用户的接受度也在不断提高,所以对软件质量的要求也随之提高,当然这个也要分行业,但这个还是包含了大部分.因为成本.质量的变化现在对自动化测试的重视度越 ...

  3. Appium python自动化测试系列之appium环境搭建(二)

    ​2.1 基础环境搭建 当我们学习新的一项技术开始基本都是从环境搭建开始,本书除了第一章节也是的,如果你连最基础的环境都没有那么我们也没必要去说太多,大概介绍一下: 1.因为appium是支持andr ...

  4. Appium python自动化测试系列之元素的定位(六)

    ​6.1 常用定位方法讲解 对象定位是自动化测试中很关键的一步,也可以说是最关键的一步,毕竟你对象都没定位那么你想操作也不行.所以本章节的知识我希望大家多动手去操作,不要仅仅只是书本上的知识,毕竟这个 ...

  5. Appium python自动化测试系列之Capability介绍(五)

    ​5.1 Capability介绍 5.1.1 什么是Capability 在讲capability之前大家是否还记得在讲log时给大家看过的启动时的日志?在我们的整个启动日志中会出现一些配置信息,其 ...

  6. Appium python自动化测试系列之认识Appium(四)

    ​4.1界面认识 在之前安装appium的时候说过我们有两种方法安装,也就有两种结果,一种是有界面的,一种是没有界面的,首先我们先讲一下有界面的,以及界面有哪些东西. 首先看第一幅图,如果你的是win ...

  7. Appium python自动化测试系列之等待函数如何进行实战(九)

    ​9.1 等待函数的使用 9.1.1 为什么要使用等待函数 我们在做自动化的时候很多时候都不是很顺利,不是因为app的问题,我们的脚本也没问题,但是很多时候都会报错,比如一个页面本来就有id为1的这个 ...

  8. Appium python自动化测试系列之使用HTMLTestRunner生成测试报告(十三)

    ​13.1 测试报告概述 13.1.1 测试报告的定义 在前面章节我们已经讲了自动化基础的很多东西,如果说掌握了,而且自己动手去练习了,我相信在一些初级的面试中是没任何问题的,今天我们接触的应该算是一 ...

  9. Appium python自动化测试系列之Android知识讲解(三)

    ​3.1 ADB工具讲解 3.1.1 什么是ADB呢? 我们不去解释官方语言的翻译,给大家说一个通熟易懂的说法,ADB我理解为他就是电脑和手机连接的桥梁.此连接不是充电的连接,大家不要混淆,说他是一个 ...

随机推荐

  1. 如何使用fiddler抓取https请求(PC和移动端)

    最近做一个抓取移动端app接口,并执行评论,收藏的接口功能测试.怎么搞/(ㄒoㄒ)/~~ 按照老思路试一试,第一步还是要用fiddler来帮忙获取接口信息! 一.基本的抓取http请求设置: 1.cm ...

  2. jmeter JDBC请求连接测试mysql数据库

    所有jmeter基本组件功能本文不做介绍.jmeter要链接mysql数据库,首先得下载mysql jdbc驱动包(注:驱动包的版本一定要与你数据库的版本匹配,驱动版本低于mysql版本有可能会导致连 ...

  3. Canvas+Video打造酷炫播放体验

    一.简介 直到现在,仍然不存在一项旨在网页上显示视频的标准. 今天,大多数视频是通过插件(比如 Flash)来显示的.然而,并非所有浏览器都拥有同样的插件. HTML5 规定了一种通过 video 元 ...

  4. 王者荣耀_KEY

    WZRY 为了排位赛的Cjj神,最近耗尽气力来打WZRY. Cjj神最近有N局预约的排位赛,其中第i局需要耗时Li的时间.因为浓浓的Gay情,Cjj神不能改变这些排位赛的的顺序.作为一个很有(mei) ...

  5. AngularJS -- Bootstrap(启动器)(转载)

    AngularJS -- Bootstrap(启动器)   点击查看AngularJS系列目录 转载请注明出处:http://www.cnblogs.com/leosx/ Bootstrap(初始化) ...

  6. Linux脚本入门(1)

    1. Linux 脚本编写基础1.1 语法基本介绍1.1.1 开头程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例 ...

  7. python---random模块使用详解

    random与随机操作有关的模块 常用方法: random() --- 返回0-1之见得一个随机浮点数. 调用:random.random() 例如: >>> random.rand ...

  8. 应试记录2(没有转载标注,NOIP2016复赛过后自动删除)

    #include<stdio.h> #include<string.h> int main() { ]; memset(a, , sizeof(a)); ;i<=;i++ ...

  9. # C语言程序设计预备作业

    一.针对老师和学生是怎样的关系的看法 ==首先我认同邹欣老师的看法,下面也是我自己的一点见解.== #### (1)师生在教育内容的教学上结成授受关系 .从教师与学生的社会角色规定意义上看,在知识上, ...

  10. codesmith连接Mysql提示“找不到请求的 .Net Framework Data Provider。可能没有安装。"

    1,首先需要将MySql.Data.dll复制到codesmith安装目录下bin文件夹下,注意dll的版本 2,其次因为codesmith7采用的是.net4.0的配置文件,(64位系统)找到C:\ ...