1. 程式人生 > >Java的selenium程式碼隨筆(8)

Java的selenium程式碼隨筆(8)

Selenium截圖方法一:

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

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

當然也是可以設定儲存到其他目錄下:FileUtils.copyFile(srcFile, new File("D:\\資料圖片", time + ".png"));

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",".\\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); //執行螢幕擷取
FileUtils.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 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",".\\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 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;
}


}