參考:https://www.cnblogs.com/longronglang/p/11332194.html
執行自動化測試的時候,我們常常會碰到測試執行失敗的時候。但是失敗我們不能只看執行失敗代碼,如果有截圖的話,就能很明顯直觀的看到是哪個地方執行失敗。
這里介紹兩種方法,一種是selenium工具自帶的截圖方法,一種是通過Robot,自動化執行的時候,建議將瀏覽器最大化
第一種:selenium之TakesScreenshot
該方法可以只截取自動化運行的瀏覽器窗口內,不會截取瀏覽器的操作按鈕和系統的任務欄區域
@Test public void screenshot(){ //自己重新封裝的訪問url方法 to("https://www.baidu.com"); File srcfile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); try { FileUtils.copyFile(srcfile, new File("H:\\12\\takescreen截圖.jpg")); } catch (IOException e) { e.printStackTrace(); } }
文件保存以及運行結果:
第二種:通過Robot截圖
該方法會截取屏幕內的所有內容,包括系統自帶的任務欄以及瀏覽器的導航欄和操作菜單
@Test public void screenByRobot(){ to("https://www.sohu.com/"); BufferedImage image = null; try { image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())); ImageIO.write(image, "jpg", new File("H:\\12\\rebot截圖.jpg")); } catch (AWTException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
運行結果查看:
附:
第三種:保存指定元素截圖
手動封裝一個方法,只需要傳遞指定頁面,頁面定位的元素即可。
public class ElementPicture { public static File captureElement(File screenshot, WebElement element){ try { BufferedImage img = ImageIO.read(screenshot); int width = element.getSize().getWidth(); int height = element.getSize().getHeight(); //獲取指定元素的坐標 Point point = element.getLocation(); //從元素左上角坐標開始,按照元素的高寬對img進行裁剪為符合需要的圖片 BufferedImage dest = img.getSubimage(point.getX(), point.getY(), width, height); ImageIO.write(dest, "png", screenshot); } catch (IOException e) { e.printStackTrace(); } return screenshot; } }
進行使用及查看
driver.get("https://www.baidu.com/"); Thread.sleep(2000); WebElement setting = driver.findElement(By.id("s-usersetting-top")); Actions actions = new Actions(driver); actions.clickAndHold(setting).perform(); driver.findElement(By.linkText("搜索設置")).click(); WebElement xuanxiang = driver.findElement(By.xpath("/html/body/div[1]/div[6]/div")); File src = ((FirefoxDriver) driver).getScreenshotAs(OutputType.FILE); try { FileUtils.copyFile(src, new File("D:\\screenshoot\\result.png")); FileUtils.copyFile(ElementPicture.captureElement(src, xuanxiang), new File("D:\\screenshoot\\test.png")); } catch (IOException e) { e.printStackTrace(); }