Java的selenium代码随笔(8)
Selenium截图方法一:
Selenium中截图类TakeScreenshout,这个类主要是获取浏览器窗体内的内容,不包括浏览器的菜单和桌面的任务栏区域,我们用百度首页来截图,看看截图效果。
FileUtils.copyFile(srcFile, new File("屏幕截图", time + ".png"));“屏幕截图”是我们自己创建的文件夹用来存放截图文件,此文件夹在project(工程)的更目录;
当然也是可以设置保存到其他目录下:Files.copyFile(srcFile, new File("D:\\资料图片", time + ".png"));
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import com.google.common.io.Files;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class ScreenShot {
private static WebDriver driver;
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver",".\\drivers\\chromedriver.exe");
driver = new ChromeDriver();
driver.get("http://www.baidu.com");
driver.manage().window().maximize();
/**
* 截屏操作
* 图片已当前时间命名
*/
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); //转换时间格式
String time = dateFormat.format(Calendar.getInstance().getTime()); //获取当前时间
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); //执行屏幕截取
Files.copyFile(srcFile, new File("屏幕截图", time + ".png")); //利用FileUtils工具类的copyFile()方法保存getScreenshotAs()返回的文件;"屏幕截图"即时保存截图的文件夹
Thread.sleep(2000);
driver.quit();
}
}
Selenium截图方法二:
Robot截屏
示例代码:(示例中的图片是保存再该工程的根目录下)
package com.sandy;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.imageio.ImageIO;
import com.google.common.io.Files;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.Point;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.internal.WrapsDriver;
public class ScreenShot {
private static WebDriver driver;
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver",".\\drivers\\chromedriver.exe");
driver = new ChromeDriver();
driver.get("http://www.baidu.com");
driver.manage().window().maximize();
robotSnapshot();
Thread.sleep(2000);
driver.quit();
}
/**
* 截屏方法二、Robot实现截屏
* @throws Exception
*/
public static void robotSnapshot() throws Exception {
//调用截图方法
BufferedImage img = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(img, "png", new File("robot_screen01.png"));
}
Selenium截图方法三:
在测试的过程中,有时候不需要截取整个屏幕,只需要截取某个元素(或者目标区域)的图片
示例代码:
package com.sandy;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.imageio.ImageIO;
import com.google.common.io.Files;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.Point;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.internal.WrapsDriver;
public class ScreenShot {
private static WebDriver driver;
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", "E:\\eclipse_jar\\selenium_jar\\chromedriver.exe");
driver = new ChromeDriver();
driver.get("http://www.baidu.com");
driver.manage().window().maximize();
WebElement element = driver.findElement(By.id("su"));
elementSnapshot(element);
//System.currentTimeMillis()、Calendar.getInstance().getTimeInMillis()获取时间戳的方法
Files.copyFile(elementSnapshot(element), new File("屏幕截图", System.currentTimeMillis()+".png"));
Thread.sleep(2000);
driver.quit();
}
/**
* 部分截图(元素截图)
* 有时候需要元素的截图,不需要整个截图
* @throws Exception
*/
public static File elementSnapshot(WebElement element) throws Exception {
//创建全屏截图
File screen = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
BufferedImage image = ImageIO.read(screen);
//获取元素的高度、宽度
int width = element.getSize().getWidth();
int height = element.getSize().getHeight();
//创建一个矩形使用上面的高度,和宽度
Rectangle rect = new Rectangle(width, height);
//元素坐标
Point p = element.getLocation();
BufferedImage img = image.getSubimage(p.getX(), p.getY(), rect.width, rect.height);
ImageIO.write(img, "png", screen);
return screen;
}
}
//进行元素截图,并返回图片路径
public String PartScreenshotFilePath(WebElement element) throws Exception {
//创建时间格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = new Date();
//创建全屏截图
File fullScreenShot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
BufferedImage image = ImageIO.read(fullScreenShot);
//获取元素的高度、宽度
int width = element.getSize().getWidth();
int height = element.getSize().getHeight();
//创建一个矩形使用上面的高度,和宽度
Rectangle rect = new Rectangle(width, height);
//元素坐标
Point p = element.getLocation();
BufferedImage img = image.getSubimage(p.getX(), p.getY(), rect.width, rect.height);
File partScreenShot = new File("ScreenShots", simpleDateFormat.format(date)+".png");
ImageIO.write(img, "png", partScreenShot);
//获取截图文件路径
String ScreenshotFilePath = partScreenShot.getPath();
return ScreenshotFilePath;
}
//对两次的截图进行对比
public boolean ScreenshotCompare(String oldScreenshotPath, String newScreenshotPath) throws IOException {
//实例化截图文件
File oldFile = new File(oldScreenshotPath);
File newFile = new File(newScreenshotPath);
//读取截图文件
BufferedImage bOldFile = ImageIO.read(oldFile);
BufferedImage bNewFile = ImageIO.read(newFile);
//存储截图文件数据
DataBuffer dOldFile = bOldFile.getData().getDataBuffer();
DataBuffer dNewFile = bNewFile.getData().getDataBuffer();
//获取截图文件尺寸
int oldFileSize = dOldFile.getSize();
int newFileSize = dNewFile.getSize();
//截图文件进行对比
boolean matchFlag = true;
if (oldFileSize == newFileSize) {
for (int i = 0; i < oldFileSize; i++) {
if (dOldFile.getElem(i) != dNewFile.getElem(i)) {
matchFlag=false;
break;
}
}
} else {
matchFlag=false;
}
return matchFlag;
}
Java的selenium代码随笔(8)的更多相关文章
- Java的selenium代码随笔(5)
//以下七种方法主要用于生成年.月.日.小时.分钟和秒的信息,用于生成保存截图的文件目录名和文件名/** 格式化输出日期* * @return 返回字符型日期*/public static Strin ...
- Java的selenium代码随笔(2)
import java.awt.AWTException;import java.awt.Robot;import java.awt.Toolkit;import java.awt.datatrans ...
- Java的selenium代码随笔(1)
package ShareClass; import java.awt.AWTException;import java.awt.Robot;import java.awt.Toolkit;impor ...
- Java的selenium代码随笔(7)
//判断元素是否存在public boolean IsElementPresent (WebElement webElement, By by) { boolean status = false; t ...
- Java的selenium代码随笔(6)
//获取元素列表public List<WebElement> ListElements(WebElement webElement, By parentBy, By childrenBy ...
- Java的selenium代码随笔(4)
//高亮操作元素public void highlight(WebElement webElement) {JavascriptExecutor javascriptExecutor = (Javas ...
- Java的selenium代码随笔(3)
/** 以下方法主要用于切换页面*/public void SetPageSwitch(String pageTitle) {Set<String> allWindowsHandles = ...
- Java使用Selenium几个例子
零.姿势 Selenium分为两个版本:Selenium RC和Selenium Webdriver.现在用Selenium Webdriver比较多. Selenium是一套工具,而不仅仅是一个操纵 ...
- 正则表达式学习笔记(附:Java版示例代码)
具体学习推荐:正则表达式30分钟入门教程 . 除换行符以外的任意字符\w word,正常字符,可以当做变量名的,字母.数字.下划线.汉字\s space,空白符 ...
随机推荐
- 最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备
在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间.我的标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架,我相信其它公司招初级开发时,应该也照着这个标准来面 ...
- Solr 15 - Solr添加和更新索引的过程 (文档的路由细节)
目录 1 添加文档的细节 1.1 注册观察者 - watcher 1.2 文档的路由 - document route 1.2.1 路由算法 1.2.2 Solr路由的实现类 1.2.3 implic ...
- springboot~zuul实现网关
网关在微服务里的角色 在微服务架构体系里,网关是非常重要的一个环节,它主要实现了一些功能的统一处理,包括了: 统一授权 统一异常处理 路由导向 跨域处理 限流 实践一下 1 添加依赖 dependen ...
- SmartCode.ETL 这不是先有鸡还是蛋的问题!
继国庆节 SmartCode 正式版(SmartCode.Generator)发布之后,SmartCode 迎来了新的能力 SmartCode.ETL ! SmartCode 正式版从开始发布就从未说 ...
- SmartSql Zookeeper分布式配置
安装 SmartSql.ZooKeeperConfig Install-Package SmartSql.ZooKeeperConfig Demo string connStr = "192 ...
- nmap命令总结
一.nmap是什么 nmap是一款网络扫描和主机检测的非常有用的工具,不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器.它可以适用于winodws,linux,mac等操作系统. ...
- 2017年IT行业测试调查报告
在刚刚过去的2017年, 我们来一起看一下2017年IT行业测试调查报告 还是1到5名测试工程师最多 Test Architects 在北上广一线城市已经出现 https://www.lagou.co ...
- maven的安装和环境配置
一.下载maven Apache Maven下载地址:http://maven.apache.org/download.cgi 二.maven的安装 将下载好的安装文件解压到d盘根目录下即可(当然,这 ...
- Windows有点腻了?不如试试Ubuntu.
最近在接触Python. 因为担心环境会向Java一样,很容易影响当前的工作电脑. 所以准备搭建一台虚拟机,不过Windows的尺寸是在太大了.所以,选择安装Ubuntu. Ubuntu官方网站地址: ...
- 基于Odoo框架的开源在线客服系统
cs_base 开源客服系统,基于 Odoo 的客服模块 cs_base 是在强大的 Odoo 框架的基础上实现的一个在线客服应用 基础模块包含完整的 Web 在线客服的接入,坐席管理等,通过扩展可方 ...