Web截图保存+WebElement截图

import org.openqa.selenium.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel;

public class Screenshot {
    /**
     * @param driver  chromedriver
     * @param targetFolderPath 目标文件夹
     * @return imagePath
     */
    public String WebScreenshot(WebDriver driver, String targetFolderPath) {
        // 将 WebDriver 强制转换为 TakesScreenshot 接口
        TakesScreenshot ts = (TakesScreenshot) driver;
        // 调用 getScreenshotAs() 方法进行截图
        File screenshotFile = ts.getScreenshotAs(OutputType.FILE);
        //目标问价夹是否存在
        File targetFolder = new File(targetFolderPath);
        if (!targetFolder.exists()) {
            //目标文件夹不存在,则新建
            targetFolder.mkdirs();
        }
        //截图命名
        String targetImagePath = targetFolderPath +File.separator+ System.currentTimeMillis() + ".png";

        File targetImage = new File(targetImagePath);
        try (FileInputStream fis = new FileInputStream(screenshotFile);
             FileOutputStream fos = new FileOutputStream(targetImage);
             FileChannel sourceChannel = fis.getChannel();
             FileChannel targetChannel = fos.getChannel()) {

            long size = sourceChannel.size();
            long transferred = 0;
            while (transferred < size) {
                transferred += sourceChannel.transferTo(transferred, size - transferred, targetChannel);
            }
            return targetImagePath;
        } catch (Exception e) {
            e.printStackTrace();
            return "图片保存失败";
        }
    }

    /**
     * 截图元素并识别返回打码数据
     * @param driver
     * @param element
     * @return code
     */
    public String WebElementScreenshot(WebDriver driver, WebElement element) {
        try {
            // Get entire page screenshot
            File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
            BufferedImage fullImg = ImageIO.read(screenshot);
            // Get the location of element on the page
            Point point = element.getLocation();

            // Get width and height of the element
            int eleWidth = element.getSize().getWidth();
            int eleHeight = element.getSize().getHeight();

            // Crop the entire page screenshot to get only element screenshot
            BufferedImage eleScreenshot = fullImg.getSubimage(point.getX(), point.getY(),
                    eleWidth, eleHeight);
            ImageIO.write(eleScreenshot, "png", screenshot);

            //fileImageToBase64 转码
            String base64Str = ImageToBase64.fileImageToBase64(screenshot);
            //识别验证码并返回code
            return new YdmVerify().commonVerify(base64Str);
        } catch (Exception e) {
            e.printStackTrace();
            return "元素截取失败";
        }
    }
}

 

posted @ 2023-11-17 11:24  o小兵o  阅读(36)  评论(0编辑  收藏  举报