我在之前的文章中曾给出浏览器显示区域截图的方法,具体请参阅 。或许,有些小主已经想到了,每次都获取整个显示区域的截图存储,那么经过一段时间后,所使用的图片服务器的容量将会受到极大的挑战,尤其是在产品需要获取页面样式截图或断言失败截图比较多的情况下。解决此问题有两种途径,一是定期清理过期的样式截图;二是不需要获取整个显示区域的样式截图(即指定区域范围截图)。此文给出的方法即是区域范围截图,敬请各位小主参阅。若有不足之处,敬请指正,不胜感激!

不唠叨了,直接上码了。。。

     /**
* 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 为浏览器最大化下的截图操作,操作步骤为:

  1. 启动 Chrome 浏览器
  2. 最大化浏览器
  3. 打开 易迅网
  4. 截图,并保存

测试 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-页面快照截图应用之二 -- 区域截图的更多相关文章

  1. Selenium2学习-035-WebUI自动化实战实例-033-页面快照截图应用之三 -- 区域截图(专业版)

    之前有写过两篇博文讲述了 WebUI 自动化测试脚本中常用的截图方法,敬请参阅如下所示链接: 浏览器显示区域截图 浏览器指定区域截图 那么当需要截取的区域不在浏览器显示窗口范围之内时,之前的方法显然无 ...

  2. Selenium2学习-025-WebUI自动化实战实例-023-页面快照截图应用之一 -- 常规截图(全页面)

    通常我们在进行自动化测试的过程中,有时候需要对页面进行截图,以保存此时的页面,用作后续的判断或测试报告.在 Web UI 自动化测试脚本过程中,通常有以下几种截图的要求: 常规截图 - 页面样式(全页 ...

  3. Selenium2学习-001-Selenium2 WebUI自动化Java开发 Windows 环境配置

    此文主要介绍 Selenium2 WebUI自动化Java开发 Windows 环境配置,供各位亲们参考,若有不足之处,敬请各位大神指正,非常感谢! 所需软件列表如下所示: 所属分类 具体名称 备注 ...

  4. 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 ...

  5. Selenium2学习-027-WebUI自动化实战实例-025-JavaScript 在 Selenium 自动化中的应用实例之三(页面滚屏,模拟鼠标拖动滚动条)

    日常的 Web UI 自动化测试过程中,get 或 navigate 到指定的页面后,若想截图的元素或者指定区域范围不在浏览器的显示区域内,则通过截屏则无法获取相应的信息,反而浪费了无畏的图片服务器资 ...

  6. Selenium2学习-039-WebUI自动化实战实例-文件上传下载

    通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...

  7. Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题

    日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚 ...

  8. Selenium2学习-016-WebUI自动化实战实例-014-Selenium 窗口选择

    在日常的 WebUI 自动化测试脚本编写过程中,经常需要打开新的页面,或者在多个打开的页面之间进行切换,以对页面元素进行相应的操作,以模拟用户的行为,实现 UI 的自动化测试.在过往的时间中,经常有初 ...

  9. Selenium2学习-014-WebUI自动化实战实例-012-Selenium 操作下拉列表实例-div+{js|jquery}

    之前已经讲过了 Selenium 操作 Select 实现的下拉列表:Selenium2学习-010-WebUI自动化实战实例-008-Selenium 操作下拉列表实例-Select,但是在实际的日 ...

随机推荐

  1. CMYK印刷色

    一,介绍 CMYK也称作印刷色彩模式,顾名思义就是用来印刷的. 它和RGB相比有一个很大的不同:RGB模式是一种发光的色彩模式,CMYK是一种依靠反光的色彩模式. CMYK——即青.洋红(品红).黄. ...

  2. redis API使用说明

    List相关: LPOP key : 删除并取得LIST头部一个元素 RPOP key : 删除并取得LIST尾部一个元素 BLPOP key [key ...] timeout : 删除并取得LIS ...

  3. Android使用AsyncTask实现可以断点续传的DownloadManager功能

    http://www.it165.net/pro/html/201211/4210.html 最近做项目卡壳了,要做个Android的应用市场,其他方面都还好说,唯独这个下载管理算是给我难住了,究其原 ...

  4. c#操作excel后关闭excel.exe的方法

    关闭进程 C#和Asp.net下excel进程一被打开,有时就无法关闭,   尤其是website.对关闭该进程有过GC.release等方法,但这些方法并不是在所有情况下均适用.  于是提出了kil ...

  5. lintcode :Coins in Line II 硬币排成线 II

    题目 硬币排成线 II 有 n 个不同价值的硬币排成一条线.两个参赛者轮流从左边依次拿走 1 或 2 个硬币,直到没有硬币为止.计算两个人分别拿到的硬币总价值,价值高的人获胜. 请判定 第一个玩家 是 ...

  6. FlyCapture2 VS2010 Configuration

    Add in the system Path: C:\Program Files (x86)\Point Grey Research\FlyCapture2\bin Project->Proje ...

  7. hdu Pie

    这道题是一道二分搜索的题,首先计算出最大的平均体积:mx=V总/f:然后去left=0,right=mx,mid=(left+right)/2进行二分搜索,当所有pi分割出的mid的个数是大于等于f时 ...

  8. IOS第五天(1:取消按钮的监听和设置代理textField字数限制)

    ***********取消按钮的监听和设置代理textField字数限制 UITextFieldDelegate #import "HMViewController.h" @int ...

  9. 【液晶模块系列基础视频】1.2.iM_RGB模块介绍

    [液晶模块系列基础视频]1.2.iM_RGB模块介绍(上) [液晶模块系列基础视频]1.2.iM_RGB模块介绍(下) ============================== 技术论坛:http ...

  10. Redis 笔记与总结7 PHP + Redis 信息管理系统(用户信息的增删改查)

    1. PHP 连接 Redis 访问 redis 官方网站的 client 栏目:http://www.redis.io/clients#php,可以获取 redis 的 php 扩展. 其中 php ...