Selenium-页面可见部分的屏幕截图

时间:2015-03-07 13:02:47

标签: selenium selenium-webdriver

有没有办法让Selenium WebDriver只截取PhantomJS页面可见部分的截图?我浏览过该来源,并且没有API AFAICT。那么有什么办法可以做到这一点吗?

编辑:Chrome已经仅捕获了可见部分,因此将其作为问题的一部分删除。

3 个答案:

答案 0 :(得分:1)

根据TakesScreenshot的JavaDoc API,扩展TakesScreenshot的WebDriver将尽最大努力按优先顺序返回以下内容:

  • 整页
  • 当前窗口
  • 当前帧的可见部分
  • 包含浏览器的整个显示的屏幕截图

由于PhantomJS是一个无头浏览器,它可能没有菜单/标签和其他类似的浏览器chrome。所以你可以控制的只是浏览器窗口的维度。

// 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));
  }

答案 1 :(得分:0)

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"));

答案 2 :(得分:0)

您可以使用机器人类,如下所示

Robot rb=new Robot();
rb.keyPress(KeyEvent.VK_ALT);
rb.keyPress(KeyEvent.VK_PRINTSCREEN);
rb.keyRelease(KeyEvent.VK_PRINTSCREEN);
rb.keyRelease(KeyEvent.VK_ALT);

将剪贴板复制到剪贴板后,您可以将其保存到文件中。