import org.openqa.selenium.*;

import java.io.File;

/**
 * 自定义截图
 *
 * @author erichary
 */
public class CustomScreenshot {

    /**
     * 向下滑动次数
     */
    private int scrollTimes = 10;

    /**
     * 上次高度
     */
    private int lastHeight = 0;

    /**
     * 重置窗口大小(调整至可以正常截图)
     *
     * @param driver 驱动对象
     */
    private void resetWindowSizeToScreenshot(WebDriver driver) {
        // 窗口最大化
        resetWindowSize(driver);
        // 向下滑动页面:到指定次数 || 高度不再变化,退出
        JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver;
        for (int i = 0; i < this.scrollTimes; i++) {
            // 获取当前高度
            Object thisHeightObject = javascriptExecutor.executeScript("return document.body.scrollHeight;");
            int thisHeight = Integer.parseInt(String.valueOf(thisHeightObject));
            // 判断高度
            if (this.lastHeight != thisHeight) {
                // 向下滑动
                javascriptExecutor.executeScript("window.scrollBy(0,10000)");
                // 滑动后赋值
                this.lastHeight = thisHeight;
            } else {
                // 高度相同,跳出
                break;
            }
        }
        // 设置窗口高度
        Dimension size = driver.manage().window().getSize();
        driver.manage().window().setSize(new Dimension(size.width, this.lastHeight));
    }

    /**
     * 重置窗口大小(最大化窗口)
     *
     * @param driver 驱动对象
     */
    private void resetWindowSize(WebDriver driver) {
        driver.manage().window().maximize();
    }

    /**
     * 全屏截图(当前可视范围)
     *
     * @param driver 驱动对象
     * @return 截图内容
     */
    public File fullScreenshot(WebDriver driver) {
        // 调整窗口
        resetWindowSize(driver);
        // 截图
        File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
        // 调整窗口
        resetWindowSize(driver);
        return file;
    }

    /**
     * 全屏截图(长图)
     *
     * @param driver 驱动对象
     * @return 截图内容
     */
    public File fullScreenshotLong(WebDriver driver) {
        // 调整窗口
        resetWindowSizeToScreenshot(driver);
        // 截图
        File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
        // 调整窗口
        resetWindowSize(driver);
        return file;
    }

    /**
     * 局域截图(单图)
     *
     * @param driver  驱动对象
     * @param element 要截图的文档节点对象
     * @return 截图内容
     */
    public File localScreenshot(WebDriver driver, WebElement element) {
        // 调整窗口
        resetWindowSizeToScreenshot(driver);
        // 截图
        File file = element.getScreenshotAs(OutputType.FILE);
        // 调整窗口
        resetWindowSize(driver);
        return file;
    }

    public int getScrollTimes() {
        return scrollTimes;
    }

    public void setScrollTimes(int scrollTimes) {
        this.scrollTimes = scrollTimes;
    }

    public int getLastHeight() {
        return lastHeight;
    }

    public void setLastHeight(int lastHeight) {
        this.lastHeight = lastHeight;
    }
}

image.png


本文由 就是吃不胖 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论