在做androidUI自动化时,常用的登陆场景,需要判断登陆成功后,成功跳转到主页。以下是我demo里的判断
Assert.assertTrue(driver.currentActivity().equals(".ui.activity.MainActivity"), "正常登录,进入主页");
获取当前的activity和目标activity做对比。预期一致则通过case,失败此case报错,此方法则不会执行。
那么失败的时候我们会想要获取到当前屏幕的截图。
我是这样做的
1.try catch捕捉报错。
try { Assert.assertTrue(driver.currentActivity().equals(".ui.activity.MainActivity"), "正常进登录,进入主页"); } catch (Exception e) { } |
2.创建监听器,监听错误
package listener; import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; import org.testng.ITestResult; import org.testng.TestListenerAdapter; import base.BaseTest; import io.appium.java_client.MobileElement; import io.appium.java_client.android.AndroidDriver; /** * @des 截图监听 * */ public class ScreenShotListener extends TestListenerAdapter { @Override public void onTestFailure(ITestResult tr) { super.onTestFailure(tr); //调用屏幕截图方法 captureScreenShot(tr); } /** * @des 失败用例,屏幕截图保存 * @param result */ public void captureScreenShot(ITestResult result) { //BaseTest.getDriver()封装好,获取driver AndroidDriver<MobileElement> driver=BaseTest.getDriver(); //获取屏幕截图 File srcFile = driver.getScreenshotAs(OutputType.FILE); DateFormat dateFormat = new SimpleDateFormat("yyyyMMddhhmmss"); File location = new File("screenshots"); String dest = result.getMethod().getRealClass().getSimpleName() + "." + result.getMethod().getMethodName(); File targetFile = new File( location.getAbsolutePath() + File.separator + dest + dateFormat.format(new Date()) + ".png"); System.out.println("----------------- file is " + targetFile.getPath()); try { FileUtils.copyFile(srcFile, targetFile); } catch (IOException e1) { e1.printStackTrace(); } } } |
3.配置监听器
有两种配置方法
1.在需要捕捉的类上方
image.png
2.在testng.xml里配置监听器
image.png
两种方式的差别在于,类上方配置,只能抓获这个类报错的截图。而testng.xml可以捕获全局。请记得Assert的地方加上try catch。