通用的UI自动化测试框架----用例执行失败截图的方法封装

    Selenium webdriver有一个很好用的功能就是对网页截屏,不管是基于Web端还是移动端的UI自动化测试,当用例执行失败时,我们总希望人工回溯失败用例的时候有依有据,这时候除了测试执行的log,还需要有一个更直观的屏幕截图。那么对于UI自动化测试该如何去实现用例失败自动截图呢?

方案思路:

1、截屏API:

    对于这样的需求,一般我们选择的测试框架中都会有现成的截屏API,比如WebDriver有提供用于截图的TakesScreenshot类,Android自动化测试的UiAutomator框架也提供了UiDevice.takeScreenshot()截屏方法,所以利用这些已有的API来实现失败截屏并不难。

2、图片管理:

    截屏已经实现了,那么问题又来了,图片该怎么命名?新增的图片该放到哪里呢?    

第一个问题:你可以按时间戳命名,也可以按用例名称命名;

第二个问题:有条件的可以搞一台服务器作为图片服务器,将图片放到图片服务器上,当然一般都没这么壕,找台主机搞个共享目录存放图片即可,对于移动端测试还可以将图片存放到测试机的SD卡中;

第三个问题,怎么和用例管理,如果你使用了某些有web界面的日志报告框架(比如extentReports、reportNG、以及封装的Log4Reports等),可以直接将图片链接插入到log信息中,那么展示到界面的就是一条图片链接,点击就可以看到截屏的详情。如果是使用的类似于log4j这种纯文本的日志框架,那么只能将图片按用例名称和操作去分类和命名了。

关键代码:

WebDriver截屏代码,截取整个网页窗口

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""Screenshot example."""

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://www.baidu.com")

# 将当前网页窗口保存为screen01.png文件,保存在当前目录

driver.save_screenshot("screen01.png")

browser.quit()

我们运行这段代码之后,会在当前目录创建名为screen01.png的图片文件。

也可以使用get_screenshot_as_file()方法进行截屏

# coding=utf-8

from selenium import webdriver

import  time

driver = webdriver.Chrome()

driver.get("http://www.baidu.com")

driver.get_screenshot_as_file('selenium_img.png')

driver.quit()

在上面这个代码运行之后,会自动访问百度,然后搜索selenium,然后截下浏览器的当前状态图片(下图为再电脑目录中的位置和上述代码的截图)

截图

    我们要做通用的UI自动化测试框架,通常要将截图的方法封装为一个方法,且将图片保存在一个目录下。

UI自动化测试框架

代码如下:

 def save_img(self, img_name):

 #传入一个img_name, 并存储到默认的文件路径下

        self.driver.get_screenshot_as_file('{}/{}.png'.format(os.path.abspath(self.img_path), img_name))

你可能感兴趣的:(通用的UI自动化测试框架----用例执行失败截图的方法封装)