我正在使用Selenide和Phantomjs来测试Web应用程序。 我把屏幕截图如下:
byte[] bytes = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.BYTES);
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
returnImage = ImageIO.read(bis);
但是,对于输入元素,屏幕截图如下所示:faulty screenshot
它实际上看起来像这样(当使用chrome / firefox时) how it's supposed to look
有趣的是,当我设置Selenide使用phantomjs(Configuration.Browser =“phantomjs”)时,它会正确截取屏幕截图。 它也只发生在那种元素上。按钮等正在记录正常。有什么想法吗?
PS:此帖子附带的屏幕截图已被裁剪,此处的代码会截取整个页面的屏幕截图。在我的代码中,我只将屏幕截图裁剪为所需元素,但即使在显示整个屏幕的屏幕截图中,元素也未正确记录。
答案 0 :(得分:0)
您可以使用以下代码截取元素:
WebElement ele = driver.findElement(By.id("hplogo"));
// Get entire page screenshot
File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
BufferedImage fullImg = ImageIO.read(screenshot);
// Get the location of element on the page
Point point = ele.getLocation();
// Get width and height of the element
int eleWidth = ele.getSize().getWidth();
int eleHeight = ele.getSize().getHeight();
// Crop the entire page screenshot to get only element screenshot
BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(),
eleWidth, eleHeight);
ImageIO.write(eleScreenshot, "png", screenshot);
// Copy the element screenshot to disk
File screenshotLocation = new File("C:\\images\\GoogleLogo_screenshot.png");
FileUtils.copyFile(screenshot, screenshotLocation);
现在在上面的代码中,您将获得getWidth()和getHeight()。您可以尝试通过添加或减去值来调整它。