我在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驱动程序截取只包含浏览器实际可见内容的屏幕截图(实际用户会看到什么)?
答案 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);
}
}