1. 程式人生 > >selenium截圖操作

selenium截圖操作

方法一:Selenium中截圖類TakeScreenshout,這個類主要是獲取瀏覽器窗體內的內容,不包括瀏覽器的選單和桌面的工作列區域,我們用百度首頁來截圖,看看截圖效果。

FileUtils.copyFile(srcFile, new File("螢幕截圖", time + ".png"));“螢幕截圖”是我們自己建立的資料夾用來存放截圖檔案,此資料夾在project(工程)的更目錄

當然也是可以設定儲存到其他目錄下: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();
		
		/**
		 * 截圖操作
		 * 圖片已當前時間命名
		 */
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");  //轉換時間格式
		String time = dateFormat.format(Calendar.getInstance().getTime());  //獲取當前時間
		File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);  //執行螢幕擷取
		FileUtils.copyFile(srcFile, new File("螢幕截圖", time + ".png")); //利用FileUtils工具類的copyFile()方法儲存getScreenshotAs()返回的檔案;"螢幕截圖"即時儲存截圖的資料夾
		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實現截圖
	 * @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"));
	}
方法三:在測試的過程中,有時候不需要擷取整個螢幕,只需要擷取某個元素(或者目標區域)的圖片

示例程式碼:

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()獲取時間戳的方法
		FileUtils.copyFile(elementSnapshot(element), new File("螢幕截圖", System.currentTimeMillis()+".png"));
		Thread.sleep(2000);
		driver.quit();
		
	}

	/**
	 * 部分截圖(元素截圖)
	 * 有時候需要元素的截圖,不需要整個截圖
	 * @throws Exception 
	 */
	public static File elementSnapshot(WebElement element) throws Exception {
		//建立全屏截圖
		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();
		
		//建立一個矩形使用上面的高度,和寬度
		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;
	}
	
	
}