我有我从拍了代码本教程。它关系到一个learn-selenium-easy.blogspot.com网站,看上去对于大多数读/热门帖子部分,并采取它的照片:
class SshotofElement {
public static void screenShotElement() throws InterruptedException,IOException {
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("marionette", true);
WebDriver driver = new ChromeDriver(capabilities);
driver.get("http://learn-selenium-easy.blogspot.com/");
driver.manage().window().maximize();
// Xpath of element to take screen shot
WebElement element=driver.findElement(By.xpath("//*[@id='PopularPosts1']"));
System.out.println(element.getSize());
File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// Take full screen screenshot
BufferedImage fullImg = ImageIO.read(screenshot);
Point point = element.getLocation();
int elementWidth = element.getSize().getWidth();
int elementHeight = element.getSize().getHeight();
BufferedImage elementScreenshot= fullImg.getSubimage(point.getX(), point.getY(), elementWidth,elementHeight); //exception here
// crop the image to required
ImageIO.write(elementScreenshot, "png", screenshot);
FileUtils.copyFile(screenshot, new File("mostread_screenshot.png"));//path to save screen shot
driver.close();
}
}
我得到一个java.awt.image.RasterFormatException: (y + height) is outside of Raster
例外,但上线BufferedImage elementScreenshot= fullImg.getSubimage(point.getX(), point.getY(), elementWidth,elementHeight);
。我不知道为什么会是这样,由于图像的点和尺寸从元素本身所。
您正在裁剪要素图像不存在于由代码所采取的屏幕截图。如果你把调试并打印全屏幕截图路径和手动查看它,那么你可以看到所需的元素从图像裁剪是不存在的。
所以首先我们需要滚动页面,使所需的元素到视图,然后采取截图。然后,我们需要裁剪基于元素的位置的图像。
此外,Point
类也不是很可靠的给元素的确切位置。
其次,如果我们看到下面的值
ImageIO.read(screenshot).getHeight() // ~ 943 => Total height
element.getSize().getHeight() // ~ 511 => Element height
point.getY() // ~ 743 => start top side y coordinate of element
所以,我相信,当矩形从X绘制,Y与743高度它去原截图坐标出来。
因此,我们需要同时通过坐标进行一些调整。
@Test
public void subImageTest() throws InterruptedException, IOException {
driver.get("http://learn-selenium-easy.blogspot.com/");
((JavascriptExecutor)driver).executeScript("window.scrollBy(0,600)");
File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
WebElement element=driver.findElement(By.xpath("//*[@id='PopularPosts1']"));
System.out.println(element.getSize());
// Take full screen screenshot
BufferedImage fullImg = ImageIO.read(screenshot);
ImageIO.read(screenshot).getHeight()
System.out.println(fullImg.getHeight());
System.out.println(fullImg.getWidth());
Point point = element.getLocation();
int elementWidth = element.getSize().getWidth();
int elementHeight = element.getSize().getHeight();
// Now no exception here
BufferedImage elementScreenshot= fullImg.getSubimage(220, 170,elementWidth+150,elementHeight+100);
// crop the image to required
ImageIO.write(elementScreenshot, "png", screenshot);
FileUtils.copyFile(screenshot, new File("C:\\Users\\AppData\\Local\\Temp\\mostread_screenshot.png"));//path to save screen shot
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句