首页 > 代码库 > 基于页面元素定位的操作失败自动截图
基于页面元素定位的操作失败自动截图
web自动化脚本运行失败,很大一部分问题出在元素定位上,博主在这里介绍一个循环定位及失败截图的方法。以方便脚本维护,定位问题。
1、以下代码是WebDriver自带的方法,封装一下,使用即可。
1 /** 2 * 截取屏幕截图并保存到指定路径 3 * 4 * @param filepath 5 * 保存屏幕截图完整文件名称及路径 6 * @return 无 7 */ 8 public void captureScreenshot(String filepath) { 9 File screenShotFile = ((TakesScreenshot) driver)10 .getScreenshotAs(OutputType.FILE);11 try {12 FileUtils.copyFile(screenShotFile, new File(filepath));13 } catch (Exception e) {14 e.printStackTrace();15 }16 }
2、截图公共方法,生成存放路径和文件名,打印失败信息
/** * 截图公共方法,生成存放路径和文件名,打印失败信息 * * @param isSucceed * if your operation success */ public void operationCheck(String methodName, boolean isSucceed) throws Exception { if (!isSucceed) { Date date = new Date(); DateFormat format = new SimpleDateFormat("yyyy-MM-dd HHmmss"); String time = format.format(date); StringBuffer sb = new StringBuffer(); String captureName = sb.append("./Captures/") .append(methodName).append(time).append(".png").toString(); captureScreenshot(captureName); System.out.println("method 【" + methodName + "】 运行失败,请查看截图快照:" + captureName); } }
3、在指定的超时时间内,循环定位页面元素,成功则随时返回true,超时时间内没有定位到元素,则执行截图方法,返回false
1 /** 2 * wait for the specified element appears with timeout setting. 3 * 4 * @param locator 5 * the element locator on the page 6 * @param timeout 7 * 超时时间,单位:秒 8 */ 9 public boolean isElementPresent(By locator, long timeout) throws Exception {10 boolean isSucceed = false;11 long timeBegins = System.currentTimeMillis();12 do {13 try {14 driver.findElement(locator);15 isSucceed = true;16 break;17 } catch (Exception e) {18 e.printStackTrace();19 }20 21 } while (System.currentTimeMillis() - timeBegins <= timeout * 1000);22 23 operationCheck("isElementPresent", isSucceed);24 return isSucceed;25 }
4、定位页面元素公共方法,每次定位元素都调用isElementPresent方法。解决元素未加载完成就点击的问题。
1 /** 2 * 定位页面元素,超时时间内反复判断元素是否出现。若元素定位失败,则截图 3 * 4 * @param by 5 * 页面元素 6 * @param timeout 7 * 超时时间 8 * @return 页面元素 9 */10 public WebElement getElement(By by, long timeout) {11 try {12 if (opr.isElementPresent(by, timeout)) { 13 return driver.findElement(by);14 }15 } catch (Exception e) {16 System.out.println(e + "");17 }18 return null;19 }
5、默认超时时间5秒,脚本使用时直接调用getElement(By by)即可
1 /** 2 * 定位页面元素,超时时间内反复判断元素是否出现。若元素定位失败,则截图 3 * 4 * @param obj 5 * 父对象 6 * 7 * @param by 8 * 页面元素 9 * @param timeout10 * 超时时间11 * @return 页面元素12 */13 public WebElement getElement(By by) {14 return getElement(by, 5);15 }
基于页面元素定位的操作失败自动截图
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。