WebDriver高级应用实例(7)
生活随笔
收集整理的這篇文章主要介紹了
WebDriver高级应用实例(7)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
7.1在測試中斷言失敗的步驟進行屏幕截圖
目的:在測試過程中,在斷言語句執行失敗時,對當前的瀏覽器進行截屏,并在磁盤上新建一個yyyy-mm-dd格式的目錄,并在斷言失敗時新建一個已hh-mm-ss格式的截圖文件
被測網頁的網址:
http://www.baidu.com
Java語言版本的API實例代碼
需要新建一個Package,將FileUtil類、DateUtil類和TestFailCaptureScreen測試類3個文件都放到這個Package下
此例子借助了兩個工具類來實現測試目的,此種方式將代碼封裝,便于提高代碼的復用度,提高測試腳本編寫的效率
DateUtil類:
import java.util.Date; //DataUtil類主要用于生成年、月、日、小時、分鐘和秒的信息,用于生成保存截圖文件目錄名和文件名 public class DateUtil { /** 格式化輸出日期* @return返回字符日期* */public static String format (java.util.Date date,String format){String result="";try {if(date != null){java.text.DateFormat df = new java.text.SimpleDateFormat(format);result = df.format(date);}} catch (Exception e) {e.printStackTrace();}return result;}/** 返回年份* @return 返回年份* */public static int getYear(java.util.Date date){java.util.Calendar c = java.util.Calendar.getInstance();c.setTime(date);return c.get(java.util.Calendar.YEAR);}/** 返回月份* @return 返回月份* */public static int getMonth(java.util.Date date){java.util.Calendar c = java.util.Calendar.getInstance();c.setTime(date);return c.get(java.util.Calendar.MONTH)+1;}/** 返回月份中的第幾天* @return 返回月份中的第幾天* */public static int getDay(java.util.Date date){java.util.Calendar c = java.util.Calendar.getInstance();c.setTime(date);return c.get(java.util.Calendar.DAY_OF_MONTH);}/** 返回小時* @param date* 日期* @return返回小時* */public static int getHour(java.util.Date date){java.util.Calendar c = java.util.Calendar.getInstance();c.setTime(date);return c.get(java.util.Calendar.HOUR_OF_DAY);}/** 返回分鐘* @param date* 日期* @return返回分鐘* */public static int getMinute(java.util.Date date){java.util.Calendar c = java.util.Calendar.getInstance();c.setTime(date);return c.get(java.util.Calendar.MINUTE);}/** 返回秒* @param date* 日期* @return 返回秒* */public static int getSecond(java.util.Date date){java.util.Calendar c = java.util.Calendar.getInstance();c.setTime(date);return c.get(java.util.Calendar.SECOND);} }
FileUtil類:
import java.io.File; import java.io.IOException;public class FileUtil {/** FileUtil類用于創目錄和文件,此例子中只使用此類的創建目錄方法,創建文件的方法僅供大家參考,將來用于根據測試需要創建指定的數據文件* */public static boolean createFile(String destFileName){File file = new File(destFileName);if(file.exists()){System.out.println("創建單個文件"+destFileName+"失敗,目標文件已存在!");return false;}if(destFileName.endsWith(File.separator)){System.out.println("創建單個文件"+destFileName+"失敗,目標文件不能為目錄");return false;}//判斷目標目錄是否存在if(!file.getParentFile().exists()){System.out.println("目標文件所在目錄不存在,準備創建它!");if(!file.getParentFile().mkdirs()){System.out.println("創建目標文件所在目錄失敗");return false;}}//創建目標文件try {if(file.createNewFile()){System.out.println("創建單個文件"+destFileName+"成功");return true;}else{System.out.println("創建單個文件"+destFileName+"失敗");return false;}} catch (IOException e) {e.printStackTrace();System.out.println("創建單個文件"+destFileName+"失敗"+e.getMessage());return false;}}public static boolean createDir(String destDirName){File dir = new File(destDirName);if(dir.exists()){System.out.println("創建目錄"+destDirName+"失敗目標目錄已經存在");return false;}//創建目錄if(dir.mkdirs()){System.out.println("創建目錄"+destDirName+"成功!");return true;}else{System.out.println("創建目錄"+destDirName+"失敗!");return false;}} }TestFailCaptureScreen測試類:
import org.testng.annotations.Test; import org.testng.annotations.BeforeMethod;import java.io.File; import java.util.Date;import org.apache.commons.io.FileUtils; import org.openqa.selenium.By; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.Assert; import org.testng.annotations.AfterMethod;public class TestFailCaptureScreen {WebDriver driver;String url = "http://www.baidu.com";@Testpublic void testSearch() {driver.findElement(By.id("kw")).sendKeys("seleium");driver.findElement(By.id("su")).click();try {/** 斷言頁面的代碼是否存在‘事在人為’這4個關鍵字,因頁面中沒有這4個字所以觸發catch語句執行并觸發截圖操作* */Assert.assertTrue(driver.getPageSource().contains("事在人為"));System.out.println("assert后續執行了");} catch (AssertionError e) {System.out.println("catch中的代碼被執行了");takeTakesScreenshot(driver);}}/** 在測試類中聲明截圖的方法,截圖方法調用了時間類和文件操作類的靜態方法,用時間格式生成目錄名稱和截圖文件名稱* */public void takeTakesScreenshot(WebDriver driver) {try {//生成日期對象Date date = new Date(); //調用DateUtil類中的方法,生成截圖文件夾日期名稱String picDir = "e:\\"+String.valueOf(DateUtil.getYear(date))+"-"+String.valueOf(DateUtil.getMonth(date))+"-"+String.valueOf(DateUtil.getDay(date));if(!new File(picDir).exists()){FileUtil.createDir(picDir);}//調用DateUtil類中的方法,生成截圖文件的時間名稱String filePath = picDir+"\\"+String.valueOf(DateUtil.getHour(new Date()))+"-"+String.valueOf(DateUtil.getMinute(new Date()))+"-"+String.valueOf(DateUtil.getSecond(new Date()))+".png";//進行截圖時將文件保存在srcFile對象中File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);//將截圖文件內容寫到磁盤中生成截圖文件FileUtils.copyFile(srcFile,new File(filePath));} catch (Exception e) {e.printStackTrace();}} @BeforeMethodpublic void beforeMethod() {System.setProperty("webdriver.chrome.driver", "D:\\WebDriver\\chromedriver_win32\\chromedriver.exe");driver = new ChromeDriver();driver.manage().window().maximize();driver.get(url);}@AfterMethodpublic void afterMethod() {driver.quit();}}
轉載于:https://www.cnblogs.com/z-zzz/p/10535860.html
總結
以上是生活随笔為你收集整理的WebDriver高级应用实例(7)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pyppeteer(python版pup
- 下一篇: 第一次小班课(英语)