如何使Selenium firefox驱动程序获取仅查看页面的屏幕截图

时间:2015-10-08 08:15:42

标签: java selenium selenium-firefoxdriver

我在Java中使用Selenium运行一系列自动GUI测试。这些测试通过以下方式正确截取屏幕截图:

<select style="text-align:center;" class="field" id="dropDown1">
    <option value="0,Pro Person im Einzelzimmer,667" rel="667">Personen</option>
    <option value="1,Pro Person im Einzelzimmer,667" rel="667">1</option>
    <option value="2,Pro Person im Einzelzimmer,667" rel="667">2</option>
    <option value="3,Pro Person im Einzelzimmer,667" rel="667">3</option>
    <option value="4,Pro Person im Einzelzimmer,667" rel="667">4</option>
    <option value="5,Pro Person im Einzelzimmer,667" rel="667">5</option>
    <option value="6,Pro Person im Einzelzimmer,667" rel="667">6</option>
    <option value="7,Pro Person im Einzelzimmer,667" rel="667">7</option>
    <option value="8,Pro Person im Einzelzimmer,667" rel="667">8</option>
    <option value="9,Pro Person im Einzelzimmer,667" rel="667">9</option>
    <option value="10,Pro Person im Einzelzimmer,667" rel="667">10</option>
</select>

这在Chrome和IE浏览器中表现非常出色,但是在Firefox中,我一直在屏幕截图下获得大量的空白。我怀疑空白实际上是页面本身的一部分,但通常在浏览器中隐藏(滚动条在空白之前停止)。我用

进行了快速测试
    public static void takeScreenshot(String screenshotPathAndName, WebDriver driver) {
        File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        try {
            FileUtils.copyFile(scrFile, new File(screenshotPathAndName));
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

并发现在使用Firefox驱动程序时,屏幕截图中捕获了整个页面,而使用Chrome驱动程序时,只会捕获浏览器中显示的内容。

有没有办法强制Firefox驱动程序截取只包含浏览器实际可见内容的屏幕截图(实际用户会看到什么)?

2 个答案:

答案 0 :(得分:2)

根据this question的答案,我可以添加4行代码,只需将图像缩小到浏览器大小即可。这确实解决了我的问题,虽然如果可以通过驱动程序解决而不是在截屏之后裁剪它会更好。

public static void takeScreenshot(String screenshotPathAndName, WebDriver driver) {
    File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    try {

        int height = driver.manage().window().getSize().getHeight();
        BufferedImage img = ImageIO.read(scrFile);
        BufferedImage dest = img.getSubimage(0, 0, img.getWidth(), height);
        ImageIO.write(dest, "png", scrFile);

        FileUtils.copyFile(scrFile, new File(screenshotPathAndName));
    } catch(Exception e) {
        e.printStackTrace();
    }
}

答案 1 :(得分:0)

试试这个:

private static void snapshotBrowser(TakesScreenshot driver, String screenSnapshotName, File browserFile) {
        try {

            File scrFile = driver.getScreenshotAs(OutputType.FILE);
            log.info("PNG browser snapshot file name: \"{}\"", browserFile.toURI().toString());

            FileUtils.deleteQuietly(browserFile);
            FileUtils.moveFile(scrFile, browserFile);
        } catch (Exception e) {
            log.error("Could not create browser snapshot: " + screenSnapshotName, e);
        }
    }