【发布时间】:2019-05-19 10:46:35
【问题描述】:
我正在通宵运行 Selenium 测试(使用 Java 和 WebDriver),并且想在其中一个测试用例失败时截取屏幕截图。如果我使用 Robot 的 createScreenCapture() 方法,它只有在显示器打开时才有效,如果我使用 Selenium 的 getScreenshotAs() 方法,它不会捕获任何弹出窗口或窗口顶部的任何内容(并且通常包含原因的问题)。 getScreenshotAs() 方法在 pc 被锁定时确实有效,这就是我目前使用的方法。如果这很重要,我的机器运行 Windows 7。
我修改了这段代码(在这个网站上找到)并且目前正在使用它:
WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy somewhere
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));
这是我以前使用过的,但如果电脑被锁定,它只会捕获一个灰色屏幕,底部的任务栏,但如果我登录它,它工作得很好并且可以捕获所有内容。问题是我需要将我的计算机锁定一夜,而这正是这段代码需要运行的时候:
Robot robot = new Robot();
// Get size of screen
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
// Capture the screen
BufferedImage screenFullImage = robot.createScreenCapture(screenRect);
// Save the screen to to disk
ImageIO.write(screenFullImage, "jpg", new File(fileName));
我在这里发现了一些其他帖子,他们提出了类似的问题,但它们都很老,与我的问题不太相符,所以我想知道在这些情况下是否有任何解决方案?
编辑: 当我使用机器人代码时,这些就是结果。我尝试同时使用 Chrome 作为浏览器 (ChromeDriver) 和 Firefox (FirefoxDriver)。
如果我在一个类中单独运行机器人版本的屏幕截图,只是一个每 5 秒捕获一次屏幕的循环(运行方式 > Java 应用程序),即使计算机锁定它也能正常工作,但是当当测试失败时,我让 Selenium 运行相同的代码(其运行方式 > JUnit 测试),如果 pc 被锁定,它会给出上面的屏幕截图。我什至尝试让 Selenium 代码在执行Thread.sleep() 时生成一个新线程来截取屏幕截图,但在电脑锁定后得到相同的结果。
【问题讨论】:
-
这很奇怪,它捕捉到正确的快照,无论屏幕是锁定还是解锁
-
Carlos:这是在计算机被锁定时发生的,但是当电脑没有被锁定时这是一个好主意,谢谢
标签: java selenium selenium-webdriver automated-tests