import java.util.concurrent.TimeUnit;
import javax.imageio.ImageIO;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.Augmenter;
import com.epath.smoketest.pageobjects.Login;import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import com.epath.smoketest.pageobjects.Navigation;
public class Screenshoptcapture {
private static int scrollTimeout = 0;
public Screenshoptcapture(int timeout) {
scrollTimeout = timeout;
}
private static String getFullHeight(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor) driver;
return js.executeScript("return document.body.scrollHeight").toString();
}
private static int getFullWidth(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor) driver;
return ((Long) js.executeScript("return window.innerWidth", new Object[0])).intValue();
}
private static int getWindowHeight(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor) driver;
return ((Long) js.executeScript("return window.innerHeight", new Object[0])).intValue();
}
private static void waitForScrolling() {
try {
Thread.sleep(scrollTimeout);
} catch (InterruptedException ignored) {
}
}
private static BufferedImage getScreenshotNative(WebDriver wd) {
ByteArrayInputStream imageArrayStream = null;
TakesScreenshot takesScreenshot = (TakesScreenshot) new Augmenter().augment(wd);
try {
imageArrayStream = new ByteArrayInputStream(takesScreenshot.getScreenshotAs(OutputType.BYTES));
return ImageIO.read(imageArrayStream);
} catch (IOException e) {
throw new RuntimeException("Can not parse screenshot data", e);
} finally {
try {
if (imageArrayStream != null) {
imageArrayStream.close();
}
} catch (IOException ignored) {
}
}
}
public static BufferedImage getScreenshot(WebDriver wd) {
JavascriptExecutor js = (JavascriptExecutor) wd;
int allHeight = Integer.parseInt(getFullHeight(wd));
int allWidth = getFullWidth(wd);
int winHeight = getWindowHeight(wd);
int scrollTimes = allHeight / winHeight;
int tail = allHeight - winHeight * scrollTimes;
BufferedImage finalImage = new BufferedImage(allWidth, allHeight, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D graphics = finalImage.createGraphics();
for (int n = 0; n < scrollTimes; n++) {
js.executeScript("scrollTo(0, arguments[0])", winHeight * n);
waitForScrolling();
BufferedImage part = getScreenshotNative(wd);
graphics.drawImage(part, 0, n * winHeight, null);
}
if (tail > 0) {
js.executeScript("scrollTo(0, document.body.scrollHeight)");
waitForScrolling();
BufferedImage last = getScreenshotNative(wd);
BufferedImage tailImage = last.getSubimage(0, last.getHeight() - tail, last.getWidth(), tail);
graphics.drawImage(tailImage, 0, scrollTimes * winHeight, null);
}
graphics.dispose();
return finalImage;
}
public static void screenshotUsingjavaScript(WebDriver wd, String filename) {
try {
ImageIO.write(getScreenshot(wd), "PNG", new File(filename));
} catch (IOException e) {
System.out.println(e);
}
}
public static void main(String argc[]) {
System.setProperty("webdriver.chrome.driver", "C:\\Users\\admin\\Desktop\\Required Software For Automation\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().fullscreen();
driver.get(" ");
Screenshoptcapture.screenshotUsingjavaScript(driver, "C:\\Users\\admin\\Desktop\\Required Software For Automation\\Userlist.png");
Utils.pauseTestExecution(8);
driver.quit();
}
}
也许你的身体实际高度为0。可能您的直接子对象是浮点数:或位置:绝对/固定的(所以他们是从框中取出的)?可能身体高度为0 或<代码>最大高度:0 。
目前,我正在尝试使用SeleniumWebDriver捕获一个屏幕截图。但我只能获得整个页面的屏幕截图。然而,我想要的只是捕获页面的一部分,或者基于ID或任何特定元素定位器捕获特定元素。(例如,我希望用image id=“Butterfly”捕捉图片) 有没有办法按所选项目或元素捕获屏幕截图?
我试图根据用户输入的坐标捕捉区域截图。基本上,用户在屏幕上点击得到x,y坐标,然后在其他地方点击另一对x,y坐标,然后将其放入一个矩形中,并使用机器人库创建屏幕截图。 我有的问题是,我得到了随机截图,这不是用户输入的坐标,我怎么能考虑包括0的坐标,因为矩形值必须超过1。 以下是我迄今为止的代码:
我试图创建一个通用的网络爬虫,将去一个网站和截图。我使用的是Python、Selnium和PhantomJS。问题是截图并没有捕获页面上的所有图像。例如,如果我去you tube,它不会捕捉主页图像下面的图像。(我没有足够高的rep来发布屏幕截图)我认为这可能与动态内容有关,但我已经尝试了等待函数,如隐式等待和on set_page_load_timeout方法。因为这是一个通用的爬虫,我不能等待
我有一个有30行的tableView,我还有一个位于tableView顶部的视图(不在tableView标题中),我想捕获屏幕的完整屏幕截图,包括视图和tableView的所有行,但我只能捕获tableView和视图的可见行。请帮助我,提前谢谢。这是我的代码和模拟器的屏幕截图。注意(我不希望我的视图位于tableview标题中,因为当我们滚动tableview时,它也会滚动,这就是为什么视图是固定
问题内容: 我想获得活动的“全页”屏幕截图。该视图包含一个RecyclerView,其中包含许多项。 我可以使用此功能拍摄当前视图的屏幕截图: 但是它仅包含我可以正常查看的项目(符合预期)。 截屏时,有什么方法可以使RecyclerView神奇地完整显示(一次显示所有项目)? 如果没有,我应该如何解决这个问题? 问题答案: 这是我的解决方案,当 所有项目的尺寸都相同 并且 只有一种类型的项目时 。
问题内容: 如何获取Android屏幕的可用高度?我需要减去状态栏/菜单栏或屏幕上可能显示的任何其他装饰的高度,并且需要它适用于所有设备。另外,我需要在onCreate函数中知道这一点。我知道之前曾有人问过这个问题,但我已经尝试过他们的解决方案,但没有一个起作用。这是我尝试过的一些方法: 我已经在API 7-17上测试了此代码。不幸的是,在API 13的水平和垂直底部都没有多余的空间,而在API