Selenium-页面可见部分的截图
Selenium- screenshot of visible part of page
有没有办法让 Selenium WebDriver 只对 PhantomJS 页面的可见部分进行截图?我浏览了源代码,没有 API AFAICT。那么有什么技巧可以做到这一点吗?
编辑:Chrome 已经只捕捉可见部分,因此将其作为问题的一部分删除。
WebDriver driver = new FirefoxDriver(); driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("c:\tmp\screenshot.png"));
您可以使用机器人 class,如下所示
Robot rb=new Robot();
rb.keyPress(KeyEvent.VK_ALT);
rb.keyPress(KeyEvent.VK_PRINTSCREEN);
rb.keyRelease(KeyEvent.VK_PRINTSCREEN);
rb.keyRelease(KeyEvent.VK_ALT);
将屏幕截图复制到剪贴板后,您就可以将其保存到文件中。
根据 TakesScreenshot 的 JavaDoc API,扩展 TakesScreenshot 的 WebDriver 将尽最大努力 return 以下优先顺序:
- 整个页面
- 当前window
- 当前帧的可见部分
- 包含浏览器的整个显示的屏幕截图
由于 PhantomJS 是无头浏览器,它可能没有 menus/tabs 和其他类似的浏览器 chrome。所以你所能控制的就是浏览器的维度 window.
// Portrait iPhone 6 browser dimensions
Dimension dim = new Dimension(375, 627);
driver.manage().window().setSize(dim);
截图很可能会捕获整个页面。如果您想将生成的文件限制为您要求的尺寸,您可以随时
crop it 到您需要的尺寸(不理想,但 PhantomJS 不是 真正的 浏览器)。
private static void capture(String url, WebDriver driver, Dimension dim, String filename) throws IOException{
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().window().setSize(dim);
driver.get(url);
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
int w = dim.getWidth();
int h = dim.getHeight();
Image orig = ImageIO.read(scrFile);
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
bi.getGraphics().drawImage(orig, 0, 0, w, h, 0, 0, w, h, null);
ImageIO.write(bi, "png", new File(filename));
}
有没有办法让 Selenium WebDriver 只对 PhantomJS 页面的可见部分进行截图?我浏览了源代码,没有 API AFAICT。那么有什么技巧可以做到这一点吗?
编辑:Chrome 已经只捕捉可见部分,因此将其作为问题的一部分删除。
WebDriver driver = new FirefoxDriver(); driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("c:\tmp\screenshot.png"));
您可以使用机器人 class,如下所示
Robot rb=new Robot();
rb.keyPress(KeyEvent.VK_ALT);
rb.keyPress(KeyEvent.VK_PRINTSCREEN);
rb.keyRelease(KeyEvent.VK_PRINTSCREEN);
rb.keyRelease(KeyEvent.VK_ALT);
将屏幕截图复制到剪贴板后,您就可以将其保存到文件中。
根据 TakesScreenshot 的 JavaDoc API,扩展 TakesScreenshot 的 WebDriver 将尽最大努力 return 以下优先顺序:
- 整个页面
- 当前window
- 当前帧的可见部分
- 包含浏览器的整个显示的屏幕截图
由于 PhantomJS 是无头浏览器,它可能没有 menus/tabs 和其他类似的浏览器 chrome。所以你所能控制的就是浏览器的维度 window.
// Portrait iPhone 6 browser dimensions
Dimension dim = new Dimension(375, 627);
driver.manage().window().setSize(dim);
截图很可能会捕获整个页面。如果您想将生成的文件限制为您要求的尺寸,您可以随时 crop it 到您需要的尺寸(不理想,但 PhantomJS 不是 真正的 浏览器)。
private static void capture(String url, WebDriver driver, Dimension dim, String filename) throws IOException{
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().window().setSize(dim);
driver.get(url);
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
int w = dim.getWidth();
int h = dim.getHeight();
Image orig = ImageIO.read(scrFile);
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
bi.getGraphics().drawImage(orig, 0, 0, w, h, 0, 0, w, h, null);
ImageIO.write(bi, "png", new File(filename));
}