仅显示可见屏幕截图的现有代码。我使用的是Chromedriver
。
System.setProperty("webdriver.chrome.driver", "D:/chromedriver/chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://www.bbc.com");
driver.manage().window().maximize();
System.out.println(driver.getTitle());
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("D:/chromedriver/scr3.png"));
driver.close();
答案 0 :(得分:1)
你不能仅使用硒来做到这一点。您需要其他工具来执行任务。点击链接,查看我的回答:Screen shot issue in selenium webdriver
希望,它可以帮到你。
答案 1 :(得分:1)
请找到以下代码,您可以根据需要滚动并截取屏幕截图。请注意elements
Webelement。存储它们并相对滚动。
您可以根据所需的屏幕截图进行滚动。
driver.get("http://www.bbc.com");
driver.manage().window().maximize();
System.out.println(driver.getTitle());
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("D:/chromedriver/scr3.png"));
WebElement elements = driver.findElement(By.xpath(".//*[@id='page']/section[6]/div/div/div[1]/ul/li[3]/div/div[2]/h3/a"));
Thread.sleep(3000L);
JavascriptExecutor js = (JavascriptExecutor) driver;
int yPosition = elements.getLocation().getY();
js.executeScript("window.scroll (0, " + yPosition + ") ");
Thread.sleep(3000L);
File scrFile1 = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile1, new File("D:/chromedriver/scr4.png"));
driver.close();
答案 2 :(得分:1)
要获取完整网页的屏幕截图,我们必须使用名为“ aShot”的第三方实用程序。 aShot是一个WebDriver Schreenshot实用程序,使用它我们可以截取整个网页以及单个WebElement的屏幕截图。为此,我们必须下载aShot jar文件,并将其与Selenium jar文件一起添加到我们的项目中。
答案 3 :(得分:1)
简短而可爱地使用Shutterbug:
public byte[] shootPage() throws IOException {
BufferedImage image = Shutterbug.shootPage(driver, ScrollStrategy.WHOLE_PAGE).getImage();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(image, "png", outputStream);
return outputStream.toByteArray();
}
答案 4 :(得分:0)
您可以尝试此方法。希望它会有用:-
public static void takeFullPageScreenShot(WebDriver driver) throws IOException {
JavascriptExecutor jsExec = (JavascriptExecutor)driver;
jsExec.executeScript("window.scrollTo(0, 0);"); //Scroll To Top
Long innerHeight = (Long) jsExec.executeScript("return window.innerHeight;");
Long scroll = innerHeight;
Long scrollHeight = (Long) jsExec.executeScript("return document.body.scrollHeight;");
scrollHeight = scrollHeight + scroll;
do{
File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
//Unique File Name For Each Screenshot
File destination = new File("E://screenshots//"+String.join("_",
LocalDateTime.now().toString().split("[^A-Za-z0-9]"))+".jpg");
FileUtils.copyFile(screenshot, destination));
jsExec.executeScript("window.scrollTo(0, "+innerHeight+");");
innerHeight = innerHeight + scroll;
}while(scrollHeight >= innerHeight);
}
答案 5 :(得分:0)
尝试此代码。 AB D的上述响应存在一些逻辑错误。它们在下面解决:
public static void takeFullPageScreenShot(WebDriver driver) throws IOException {
JavascriptExecutor jsExec = (JavascriptExecutor)driver;
//Returns a Long, Representing the Height of the window’s content area.
Long windowHeight = (Long) jsExec.executeScript("return window.innerHeight;");
//Returns a Long, Representing the Height of the complete WebPage a.k.a. HTML document.
Long webpageHeight = (Long) jsExec.executeScript("return document.body.scrollHeight;");
//Marker to keep track of the current position of the scroll point
//Long currentWindowScroll = Long.valueOf(0);
//Using java's boxing feature to create a Long object from native long value.
Long currentWindowScroll = 0L;
do{
//System.out.println(windowHeight + ", " + webpageHeight + ", " + currentWindowScroll);
jsExec.executeScript("window.scrollTo(0, " + currentWindowScroll + ");");
Actions act = new Actions(driver);
act.pause(5000).perform();
File tempScreenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
//Unique File Name For Each Screenshot
File destination = new File("C:\\core_java\\DemoScreenShot\\" + String.join("_", LocalDateTime.now().toString().split("[^A-Za-z0-9]"))+ ".png");
Files.copy(tempScreenshot, destination);
currentWindowScroll = currentWindowScroll + windowHeight;
}while(currentWindowScroll <= webpageHeight);
}