《手把手教你》系列技巧篇(六十)-java+ selenium自動化測試 – 截圖三劍客 -中篇(詳細教程)
- 2022 年 1 月 21 日
- 筆記
- java+selenium自動化測試
1.簡介
前面我們介紹了Selenium中TakeScreenshot類來截圖,得到的圖片是瀏覽器窗口內的截圖。有時候,只截瀏覽器窗口內的圖是不夠的,而且TakeScreenshot截圖只針對瀏覽器的web事件,假如你在運行腳本過程,windows上有一個其他軟體彈出了一個購物的彈窗頁面,這個時候就會干擾你截圖。所以,有時候我們需要整個螢幕截圖,這個時候我們就需要用到Robot這個類。原理大概是,從電腦螢幕左上角畫一個長方形,一直畫到螢幕右下角,然後得到File對象,在把這個File是用png還是jpg保存,複製到一個具體路徑,這個就是截圖的整個流程。
按照計劃宏哥今天將介紹java+ selenium自動化測試截圖操作實現的第二種截圖方法,也就是截圖的第二劍客 – Robot。
2.Robot
該方法會截取螢幕內的所有內容,包括系統自帶的任務欄以及瀏覽器的導航欄和操作菜單。我們用搜狐首頁來截圖,看看截圖效果。
3.測試場景
具體步驟就是:
(1)訪問搜狐首頁
(2)調用截圖類截圖
(3)保存截圖
4.自動化實戰
4.1程式碼設計
FileUtils.copyFile(srcFile, new File(“RobotScreenshots”, “robot_screen01.png”));「螢幕截圖」是我們自己創建的文件夾用來存放截圖文件,此文件夾在project(工程)的更目錄,如下圖所示:
當然也是可以設置保存到其他目錄下:FileUtils.copyFile(srcFile, new File("D:\\資料圖片", "robot_screen01.png"));
示例程式碼如下圖所示:
4.2參考程式碼
package lessons; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; /** * @author 北京-宏哥 * * @公眾號:北京宏哥 * * @《手把手教你》系列技巧篇(六十)-java+ selenium自動化測試 - 截圖三劍客 -中篇(詳細教程) * * @2022年01月09日 */ public class RobotScreenShot { public static void main(String[] args) throws Exception { System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.manage().window().maximize(); driver.get("//www.sohu.com/"); robotSnapshot(); Thread.sleep(2000); System.out.println("browser will be close"); driver.quit(); } /** * 截屏方法二、Robot實現截屏 * @throws Exception */ public static void robotSnapshot() throws Exception { //調用截圖方法 BufferedImage img = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())); ImageIO.write(img, "png", new File("RobotScreenshots","robot_screen01.png")); } }
4.3運行程式碼
1.運行程式碼,右鍵Run AS->Java Appliance,控制台輸出,如下圖所示:
2.文件保存結果及預覽,如下圖所示:
3.運行程式碼後電腦端的瀏覽器的動作,如下小影片所示:
5.小結
robot方法如果你沒有創建文件夾,或者填寫路徑沒有不存在,程式碼會報錯:系統找不到指定的路徑,因此需要你在運行程式碼前將文件夾創建好。如下圖所示: