Appium 实现案例测试失败后自动截图功能跟Webdriver一样,基于 TestNG 需要继承TestListenerAdapter,具体实现可以参考下文:
http://www.cnblogs.com/lincj/p/6007128.html
package com.fsssc.htsgl.utils; import io.appium.java_client.android.AndroidDriver; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; import org.openqa.selenium.WebElement; import org.testng.ITestResult; import org.testng.TestListenerAdapter; import com.fc.boxapk.ApkBoxOperation; public class ScreenShotListener extends TestListenerAdapter { @Override public void onTestFailure(ITestResult tr) { //安卓程序的操作类 ApkBoxOperation apkRemoteControl = ApkBoxOperation.getInstance(); //监控截图的driver AndroidDriver<WebElement> driver = apkRemoteControl.driver; // 截图文件夹 File path = new File("screenshots"); //截图位置及文件名 名称为 标识 + 类名 + 方法名 String name = path.getAbsolutePath() + File.separator + MysqlUtils.executionFlag+"_"+MysqlUtils.exeClassName +"."+ tr.getMethod().getMethodName() + ".png"; // File screenShot = driver.getScreenshotAs(OutputType.FILE); try { FileUtils.copyFile(screenShot, new File(name)); } catch (IOException e) { e.printStackTrace(); } } }
在实现这个例子的过程中,有的案例失败会截图,有的一直卡在
File screenShot = driver.getScreenshotAs(OutputType.FILE);
这句代码上,对比能够截图成功的案例和不能截图成功的案例发现在截图前一定要把driver切换为native模式的(driver.context("NATIVE_APP")这种方法),因为实例化driver的时候使用的是AndroidDriver。