Appium自动化中截图的问题

炒沙作縻终不饱,缕冰文章费工巧。这篇文章主要讲述Appium自动化中截图的问题相关的知识,希望能为你提供帮助。
【Appium自动化中截图的问题】在用Appium做UI自动化过程中,大家会发现测试报告很重要,而在测试报告中截图很重要。
因为很多公司都是用Jenkins作为持续集成工具,所以要让执行自动化测试的人看明白自动化在跑什么,哪里失败了,关键节点都需要截图。
怎么做呢,目前项目中是这么实现的:
1.实现截图功能类:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public  static  String screenShot(ShipperandroidEmulator ae) {         String dir =  "screenshot";   // TODO         String time =  new  SimpleDateFormat("yyyyMMdd-HHmmss").format(new  Date());         String screenShotPath = dir + File.separator + time +  ".png";           AndroidDriver augmentedDriver =  null;         augmentedDriver = ae.getAndroid();             try  {                 File sourceFile = ((TakesScreenshot) augmentedDriver).getScreenshotAs(OutputType.FILE);                 FileUtils.copyFile(sourceFile,  new  File(screenShotPath));         catch  (Exception e) {                 e.printStackTrace();                 return  "Failed to screenshot";         }           return  screenShotPath.replace("\\""/"); }
2.用screenShot实现错误处理类:
1 2 3 4 5 6 7 8 9 10 private  void  handleFailure(String notice) {         String png = LogTools.screenShot(this);         String log = notice +  " > > capture screenshot at "  + png;         logger.error(log);         if  (GlobalSettings.baseStorageUrl.lastIndexOf("/") == GlobalSettings.baseStorageUrl.length()) {                 GlobalSettings.baseStorageUrl = GlobalSettings.baseStorageUrl.substring(0, GlobalSettings.baseStorageUrl.length() -  1);         }         Reporter.log(log +  "< br/> < img src=https://www.songbingjia.com/""  + GlobalSettings.baseStorageUrl +  "/"  + png +  "\" /> ");         Assert.fail(log); }
3.对所有appium界面操作类进行处理:
1 2 3 4 5 6 7 8 9 10 11 12 public  void  click(By by) {           expectElementExistOrNot(true, by, timeout);         try{                 clickTheClickable(by,System.currentTimeMillis(),2500);                 handleSuccess("Succeed to click "  + by);         }catch(Exception e){                 e.printStackTrace();                 handleFailure("Failed to click "  + by);         }         logger.info("Clicked "  + by); }
 
 
4. 不能点击时候重试点击操作 
private void clickTheClickable(By byElement, long startTime, int timeOut) throws Exception {
try {
findElementBy(byElement).click();
} catch (Exception e) {
if (System.currentTimeMillis() - startTime > timeOut) {
logger.warn(byElement+ " is unclickable");
throw new Exception(e);
} else {
Thread.sleep(500);
logger.warn(byElement + " is unclickable, try again");
clickTheClickable(byElement, startTime, timeOut);
}
}














    推荐阅读