Selenium2学习-033-WebUI自动化实战实例-031-页面快照截图应用之二 -- 区域截图
我在之前的文章中曾给出浏览器显示区域截图的方法,具体请参阅 。或许,有些小主已经想到了,每次都获取整个显示区域的截图存储,那么经过一段时间后,所使用的图片服务器的容量将会受到极大的挑战,尤其是在产品需要获取页面样式截图或断言失败截图比较多的情况下。解决此问题有两种途径,一是定期清理过期的样式截图;二是不需要获取整个显示区域的样式截图(即指定区域范围截图)。此文给出的方法即是区域范围截图,敬请各位小主参阅。若有不足之处,敬请指正,不胜感激!
不唠叨了,直接上码了。。。
/**
* Get basic snapshot for expected area of display screen area
*
* @author Aaron.ffp
* @version V1.0.0: autoSeleniumDemo main.aaron.sele.core SeleniumCore.java snapshotPartial, 2015-7-28 01:41:12 Exp $
*
* @param filename : store png file name
* @param left : left distance
* @param top : top distance
* @param width : width distance
* @param height : height distance
*
* @return boolean
*/
public boolean snapshotPartial(String filename, int left, int top, int width, int height){
boolean success = false; try {
// Get byte data of full screen capture
byte[] byte_screen_capture = ((TakesScreenshot) this.webdriver).getScreenshotAs(OutputType.BYTES); // create full screen capture
BufferedImage img_screen_catpture = ImageIO.read(new ByteArrayInputStream(byte_screen_capture)); // get partial image by location and size
BufferedImage partial_screen_capture = img_screen_catpture.getSubimage(left, top, width, height); File f = new File(filename); if (f.isFile() && f.exists()) {
f.delete();
} // store partial image
ImageIO.write(partial_screen_capture, "png", f); success = true;
} catch (IOException ioe_sci) {
ioe_sci.printStackTrace();
} catch (RasterFormatException rfe) {
rfe.printStackTrace();
} return success;
}
下面就以获取易迅网首页中 aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGUAAAAdCAIAAAA8bzU0AAABCElEQVRoge3UQQ4DIQgF0Fn2/nfsDdzbXUOKfMHiSNNvWLSOEXwycz2vB8MZrbXreBE/FPSiF73qBL3oRa86Qa8bvXrvKUXgfeRT/8pNNce8dLJh+i6G/jvcARwDePXZSCcL91foDj8sMLfneNoLX5tHdq8XSB/18nerxxQrZPXat997fELLy/KVj4bKeDJ6E9u9oh0xfR8985rGM1PCSycYCuJhsVrpht1nrfS/sHh9mhdIb0FYLnIeHAD0jpUdlISvf5cXzrfg5UxhpZt2TdQlzcs681mvhSLv8HLeW7X+OuYF6ntXKRVk6fr3dJ/pGs8tJmItev1z0Ite9KoT9KIXveoEvcJeL+l25IWPfl38AAAAAElFTkSuQmCC" alt="" /> 这个截图为例演示。
测试 test_snapshotPartial_full 为浏览器最大化下的截图操作,操作步骤为:
- 启动 Chrome 浏览器
- 最大化浏览器
- 打开 易迅网
- 截图,并保存
测试 test_snapshotPartial_cal 为浏览器非最大化下的截图操作,操作步骤与上类似,只是此时非全屏。
测试源码如下所示:
/**
* Aaron.ffp Inc.
* Copyright (c) 2004-2015 All Rights Reserved.
*/
package main.aaron.demo.javascript; import main.aaron.sele.core.SeleniumCore; import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; /**
*
* @author Aaron.ffp
* @version V1.0.0: autoSeleniumDemo main.aaron.demo.javascript JQuery.java, 2015-7-27 13:31:31 Exp $
*/
public class JQuery extends SeleniumCore{
String jq = "webelement = $('.btn-cor-1')[0]; " +
"return webelement.offsetTop + ';' + webelement.offsetLeft + ';' + " +
" webelement.offsetHeight + ';' + webelement.offsetWidth";
String baseUrl = "http://www.yixun.com/";
final String PROJECTHOME = System.getProperty("user.dir") + System.getProperty("file.separator") + "capture" + System.getProperty("file.separator"); @BeforeClass
public void beforeClass() throws InterruptedException{
this.webdriver = new ChromeDriver();
this.webdriver.manage().window().maximize();
this.webdriver.get(baseUrl);
Thread.sleep(5000);
} @AfterClass
public void afterClass(){
this.webdriver.close();
this.webdriver.quit();
} /**
* Get capture under full screen
*
* @author Aaron.ffp
* @version V1.0.0: autoSeleniumDemo main.aaron.demo.javascript JQuery.java test_snapshotPartial_full, 2015-8-8 15:54:53 Exp $
*
*/
@Test
public void test_snapshotPartial_full(){
String filename = this.PROJECTHOME + "test_snapshotPartial_full.png"; // set browser maximize
this.webdriver.manage().window().maximize(); // open yixun
this.webdriver.get(baseUrl); // get element rcc
int[] ele_rcc = this.getElementPositionAndSize(By.cssSelector(".btn-cor-1")); System.out.println("\nStart test_snapshotPartial_full ...");
System.out.println("position : Top --> " + ele_rcc[0] + "\tLeft --> " + ele_rcc[1] + "\tWidth --> " + ele_rcc[2] + "\tHeight --> " + ele_rcc[3]); // capture
if (this.snapshotPartial(filename, ele_rcc[0], ele_rcc[1], ele_rcc[2], ele_rcc[3])) {
System.out.println("Partial screen snap successed, the image path is : " + filename + "\n");
}
} /**
* Get capture by calculator snapshot area after scroll screen
*
* @author Aaron.ffp
* @version V1.0.0: autoSeleniumDemo main.aaron.demo.javascript JQuery.java test_snapshotPartial_cal, 2015-8-8 15:52:03 Exp $
*
*/
@Test
public void test_snapshotPartial_cal(){
String filename = this.PROJECTHOME + "test_snapshotPartial_cal.png"; // set browser size
this.setBrowserSize(500, 800);
this.webdriver.navigate().refresh(); // get position and size of rcc
int[] ele_rcc = this.getElementPositionAndSize(By.cssSelector(".btn-cor-1")); // scroll screen
this.scrollScreen(ele_rcc[0], ele_rcc[1]); // get position and size of browser
int[] browser_ps = this.getBrowserPositionAndSize(); // get size of body
int[] bodySize = this.getBrowserBodySize(); System.out.println("\nStart test_snapshotPartial_cal ...");
System.out.println("Browser : " + browser_ps[0] + "\t" + browser_ps[1] + "\t" + browser_ps[2] + "\t" + browser_ps[3]);
System.out.println("Body : " + bodySize[0] + "\t" + bodySize[1]);
System.out.println("element : " + ele_rcc[0] + "\t" + ele_rcc[1] + "\t" + ele_rcc[2] + "\t" + ele_rcc[3]);
System.out.println("capture : " + 310 + "\t" + 0 + "\t" + ele_rcc[2] + "\t" + ele_rcc[3]); // capture
if (this.snapshotPartial(filename, 310, 0, ele_rcc[2], ele_rcc[3])) {
System.out.println("Partial screen snap successed, the image path is : " + filename);
}
}
}
至此,WebUI 自动化功能测试脚本第 031-页面快照截图应用之二 -- 区域截图 顺利完结,希望此文能够给初学 Selenium 的您一份参考。
最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^
Selenium2学习-033-WebUI自动化实战实例-031-页面快照截图应用之二 -- 区域截图的更多相关文章
- Selenium2学习-035-WebUI自动化实战实例-033-页面快照截图应用之三 -- 区域截图(专业版)
之前有写过两篇博文讲述了 WebUI 自动化测试脚本中常用的截图方法,敬请参阅如下所示链接: 浏览器显示区域截图 浏览器指定区域截图 那么当需要截取的区域不在浏览器显示窗口范围之内时,之前的方法显然无 ...
- Selenium2学习-025-WebUI自动化实战实例-023-页面快照截图应用之一 -- 常规截图(全页面)
通常我们在进行自动化测试的过程中,有时候需要对页面进行截图,以保存此时的页面,用作后续的判断或测试报告.在 Web UI 自动化测试脚本过程中,通常有以下几种截图的要求: 常规截图 - 页面样式(全页 ...
- Selenium2学习-001-Selenium2 WebUI自动化Java开发 Windows 环境配置
此文主要介绍 Selenium2 WebUI自动化Java开发 Windows 环境配置,供各位亲们参考,若有不足之处,敬请各位大神指正,非常感谢! 所需软件列表如下所示: 所属分类 具体名称 备注 ...
- Selenium2学习-007-WebUI自动化实战实例-005-解决 Firefox 版本不兼容:org.openqa.selenium.WebDriverException: Failed to connect to binary FirefoxBinary
此文主要讲述 Java 运行 Selenium 脚本时,因 Friefox 浏览器版本与 selenium-server-standalone-x.xx.x.jar 不兼容引起的 org.openqa ...
- Selenium2学习-027-WebUI自动化实战实例-025-JavaScript 在 Selenium 自动化中的应用实例之三(页面滚屏,模拟鼠标拖动滚动条)
日常的 Web UI 自动化测试过程中,get 或 navigate 到指定的页面后,若想截图的元素或者指定区域范围不在浏览器的显示区域内,则通过截屏则无法获取相应的信息,反而浪费了无畏的图片服务器资 ...
- Selenium2学习-039-WebUI自动化实战实例-文件上传下载
通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...
- Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题
日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚 ...
- Selenium2学习-016-WebUI自动化实战实例-014-Selenium 窗口选择
在日常的 WebUI 自动化测试脚本编写过程中,经常需要打开新的页面,或者在多个打开的页面之间进行切换,以对页面元素进行相应的操作,以模拟用户的行为,实现 UI 的自动化测试.在过往的时间中,经常有初 ...
- Selenium2学习-014-WebUI自动化实战实例-012-Selenium 操作下拉列表实例-div+{js|jquery}
之前已经讲过了 Selenium 操作 Select 实现的下拉列表:Selenium2学习-010-WebUI自动化实战实例-008-Selenium 操作下拉列表实例-Select,但是在实际的日 ...
随机推荐
- COJ262 HDNOIP201206施工方案
HDNOIP201206施工方案 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 c国边防军在边境某处的阵地是由n个地堡组成的. ...
- esper 事件引擎,各种事件类型示例代码
原创文章 转载请注明出处 package com.hp.iot.engine.esper; import java.util.ArrayList; import java.util.HashMap; ...
- 安装win7 ubuntu双系统
http://www.cnblogs.com/shengansong/archive/2011/10/23/2221716.html http://www.cnblogs.com/shenganson ...
- linux下查看一个进程的启动时间和运行时间
使用 ps命令 :#ps -A -opid,stime,etime,args ps -A -opid,stime,etime,args 结果: root:src# ps -A -opid,stime, ...
- Struts2之自定义类型转换器
Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用d ...
- Qt Creator Shortcuts 快捷键大全
编号 快捷键 功能 1 Esc 切换到代码编辑状态 2 F1 查看帮助(选中某一类或函数,按下F1,出现帮助文档) 3 F2 在光标选中对象的声明和定义之间切换(和Ctrl+鼠标左键一样的效果,选中某 ...
- 大数据技术hadoop入门理论系列之二—HDFS架构简介
HDFS简单介绍 HDFS全称是Hadoop Distribute File System,是一个能运行在普通商用硬件上的分布式文件系统. 与其他分布式文件系统显著不同的特点是: HDFS是一个高容错 ...
- MUI - 手势
www.bcty365.com/content-146-2389-1.html 配置事件 mui.init({ gestureConfig: { hold: true, //长按屏幕,默认是false ...
- SQL中批量删除被注入的恶意代码的方法
下文将为您介绍SQL中批量删除被注入的恶意代码的方法,供您参考,如果您也遇到了这样的问题,不妨一看,相信对您会有所帮助. 1,如果你的数据表很少的话,那么写几条简单的sql就搞定了 对于表中的nvch ...
- Java静态块学习
静态块是类里面的构造器,对象有构造器那么类也有构造器,类里面的构造器叫做初始化方法.也就是new一个对象他会经过一个构造器.加载一个类,也有被初始化的一片代码,这个就称之为静态块.一个类里面可以有很多 ...