1. 通過瀏覽器截圖的方式
/**
*@param WebElement 要截取的驗證碼
*@param driver 當前瀏覽器
*return 驗證碼圖片
*/
public static File getImgFileByScreenshot(WebElement element, WebDriver driver){
if (element == null) throw new NullPointerException("圖片元素失敗");
WrapsDriver wrapsDriver = (WrapsDriver) element; //截取整個頁面
File scrFile = ((TakesScreenshot)wrapsDriver.getWrappedDriver()).getScreenshotAs(OutputType.FILE);
try {
BufferedImage img = ImageIO.read(scrFile);
int screenshotWidth = img.getWidth();
Dimension dimension = driver.manage().window().getSize();
//獲取瀏覽器尺寸與截圖的尺寸
double scale = (double) dimension.getWidth() / screenshotWidth;
int eleWidth = element.getSize().getWidth();
int eleHeight = element.getSize().getHeight();
Point point = element.getLocation();
int subImgX = (int)(point.getX() / scale); //獲得元素的坐標
int subImgY = (int)(point.getY() / scale);
int subImgWight = (int)(eleWidth / scale); //獲取元素的寬高
int subImgHeight = (int)(eleHeight / scale);
//精準的截取元素圖片,
BufferedImage dest = img.getSubimage(subImgX, subImgY, subImgWight, subImgHeight);
ImageIO.write(dest, "png", scrFile);
} catch (Exception e) {
e.printStackTrace();
}
return scrFile;
}
#######這里多出了一個計算瀏覽器頁面尺寸和截圖尺寸比例的步驟并不直接使用Point的X和Y屬性和元素的寬高來截取驗證碼。(如果代碼只在window上運行可以直接使用)因為我的開發(fā)機是mac os 使用File scrFile =((TakesScreenshot)wrapsDriver.getWrappedDriver()).getScreenshotAs(OutputType.FILE); 獲取到的圖片尺寸要大于瀏覽器頁面的尺寸。如果直接使用瀏覽器上的Point屬性是截取不到指定元素的。