Java selenium截圖操作的實(shí)現(xiàn)
方法一:Selenium中截圖類TakeScreenshout,這個(gè)類主要是獲取瀏覽器窗體內(nèi)的內(nèi)容,不包括瀏覽器的菜單和桌面的任務(wù)欄區(qū)域,我們用百度首頁來截圖,看看截圖效果。
FileUtils.copyFile(srcFile, new File("屏幕截圖", time + ".png"));“屏幕截圖”是我們自己創(chuàng)建的文件夾用來存放截圖文件,此文件夾在project(工程)的更目錄
;
當(dāng)然也是可以設(shè)置保存到其他目錄下:FileUtils.copyFile(srcFile, new File("D:\\資料圖片", time + ".png"));
示例代碼如下:
package com.sandy;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import org.apache.commons.io.FileUtils;
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", "E:\\eclipse_jar\\selenium_jar\\chromedriver.exe");
driver = new ChromeDriver();
driver.get("http://www.baidu.com");
driver.manage().window().maximize();
/**
* 截屏操作
* 圖片已當(dāng)前時(shí)間命名
*/
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); //轉(zhuǎn)換時(shí)間格式
String time = dateFormat.format(Calendar.getInstance().getTime()); //獲取當(dāng)前時(shí)間
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); //執(zhí)行屏幕截取
FileUtils.copyFile(srcFile, new File("屏幕截圖", time + ".png")); //利用FileUtils工具類的copyFile()方法保存getScreenshotAs()返回的文件;"屏幕截圖"即時(shí)保存截圖的文件夾
Thread.sleep(2000);
driver.quit();
}
}
方法二: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 org.apache.commons.io.FileUtils;
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();
robotSnapshot();
Thread.sleep(2000);
driver.quit();
}
/**
* 截屏方法二、Robot實(shí)現(xiàn)截屏
* @throws Exception
*/
public static void robotSnapshot() throws Exception {
//調(diào)用截圖方法
BufferedImage img = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(img, "png", new File("robot_screen01.png"));
}
方法三:在測(cè)試的過程中,有時(shí)候不需要截取整個(gè)屏幕,只需要截取某個(gè)元素(或者目標(biāo)區(qū)域)的圖片
示例代碼:
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 org.apache.commons.io.FileUtils;
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()獲取時(shí)間戳的方法
FileUtils.copyFile(elementSnapshot(element), new File("屏幕截圖", System.currentTimeMillis()+".png"));
Thread.sleep(2000);
driver.quit();
}
/**
* 部分截圖(元素截圖)
* 有時(shí)候需要元素的截圖,不需要整個(gè)截圖
* @throws Exception
*/
public static File elementSnapshot(WebElement element) throws Exception {
//創(chuàng)建全屏截圖
WrapsDriver wrapsDriver = (WrapsDriver)element;
File screen = ((TakesScreenshot)wrapsDriver.getWrappedDriver()).getScreenshotAs(OutputType.FILE);
BufferedImage image = ImageIO.read(screen);
//獲取元素的高度、寬度
int width = element.getSize().getWidth();
int height = element.getSize().getHeight();
//創(chuàng)建一個(gè)矩形使用上面的高度,和寬度
Rectangle rect = new Rectangle(width, height);
//元素坐標(biāo)
Point p = element.getLocation();
BufferedImage img = image.getSubimage(p.getX(), p.getY(), rect.width, rect.height);
ImageIO.write(img, "png", screen);
return screen;
}
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python+Selenium+phantomjs實(shí)現(xiàn)網(wǎng)頁模擬登錄和截圖功能(windows環(huán)境)
- selenium+python截圖不成功的解決方法
- Python實(shí)現(xiàn)的網(wǎng)頁截圖功能【PyQt4與selenium組件】
- 關(guān)于Selenium的UI自動(dòng)化測(cè)試屏幕截圖功能實(shí)例代碼
- Selenium Webdriver實(shí)現(xiàn)截圖功能的示例
- Python+selenium實(shí)現(xiàn)截圖圖片并保存截取的圖片
- Python中使用 Selenium 實(shí)現(xiàn)網(wǎng)頁截圖實(shí)例
- Selenium基于PIL實(shí)現(xiàn)拼接滾動(dòng)截圖
相關(guān)文章
基于JavaScript動(dòng)態(tài)規(guī)劃編寫一個(gè)益智小游戲
最近在學(xué)習(xí)動(dòng)態(tài)規(guī)劃相關(guān)的知識(shí),所以本文將利用動(dòng)態(tài)規(guī)劃編寫一個(gè)簡單的益智小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-06-06
SpringBoot實(shí)用小技巧之如何動(dòng)態(tài)設(shè)置日志級(jí)別
這篇文章主要給大家介紹了關(guān)于SpringBoot實(shí)用小技巧之如何動(dòng)態(tài)設(shè)置日志級(jí)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Spring七大事務(wù)傳遞機(jī)制深入分析實(shí)現(xiàn)原理
實(shí)際項(xiàng)目開發(fā)中,如果涉及到多張表操作時(shí),為了保證業(yè)務(wù)數(shù)據(jù)的一致性,大家一般都會(huì)采用事務(wù)機(jī)制,好多小伙伴可能只是簡單了解一下,遇到事務(wù)失效的情況,便會(huì)無從下手,下面這篇文章主要給大家介紹了關(guān)于Spring事務(wù)傳遞機(jī)制的相關(guān)資料,需要的朋友可以參考下2023-03-03
ActiveMQ結(jié)合Spring收發(fā)消息的示例代碼
這篇文章主要介紹了ActiveMQ結(jié)合Spring收發(fā)消息的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-10-10

