使用appium捕获Android屏幕截图

时间:2014-04-16 20:41:45

标签: java android ios appium

我目前正在尝试使用java和junit捕获iOS上用于appium测试的屏幕截图。在测试完成之前,它会运行此代码以在杀死连接之前获取屏幕上最后一个可见的内容

@After
public void tearDown() throws Exception {
    if (platform.equals(iOS)) {
        captureScreenshot(testName.getMethodName());
    }
    driver.quit();
}

@SuppressWarnings("Augmenter")
public void captureScreenshot(String testName) {
    String imagesLocation = "target/surefire-reports/screenshot/" + platform + "/";
    new File(imagesLocation).mkdirs(); // Insure directory is there
    String filename = imagesLocation + testName + ".jpg";

    try {
        Thread.sleep(500);
        WebDriver augmentedDriver = new Augmenter().augment(driver);
        File scrFile = ((TakesScreenshot)augmentedDriver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(scrFile, new File(filename), true);
    } catch (Exception e) {
        System.out.println("Error capturing screen shot of " + testName + " test failure.");
        // remove old pic to prevent wrong assumptions
        File f = new File(filename);
        f.delete(); // don't really care if this doesn't succeed, but would like it to.
    }
}

这种方法适用于Android,但最近它完全杀死了运行测试,但这可能与它试图获取快照的设备有关。在它保存文件之前,图像会出现空白或损坏。

任何人都知道如何使用appium在Android上运行图像/屏幕捕获?也许是UIAutomator的东西?

2 个答案:

答案 0 :(得分:8)

您可以使用此方法:

public void screenshot(String path_screenshot) throws IOException{
    File srcFile=driver.getScreenshotAs(OutputType.FILE);
    String filename=UUID.randomUUID().toString(); 
    File targetFile=new File(path_screenshot + filename +".jpg");
    FileUtils.copyFile(srcFile,targetFile);
}

它适用于我。

答案 1 :(得分:3)

我碰巧通过谷歌搜索找到了几乎同样的问题 - 在Android模拟器中的Appium屏幕截图显示为空白。我正在使用与您上面描述的“原生”方法 - 以及 - ATU框架内的方法。

WebElement appArea = wd.findElementByXPath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]");
ATUReports.add("Main Screen Area Screenshot", LogAs.INFO, new CaptureScreen(appArea));

并且都返回空白/透明。一个好消息是,该空白/透明图像的尺寸正是我想要捕获的尺寸 - 避免状态栏中日期差异会导致图像比较出错。也就是说,没有实际可见像素(用于对象区域抓取与经验证的基线图像的最终匹配)并没有多大用处。

我尝试将上下文设置为“NATIVE_APP”,似乎没有任何帮助。总而言之,我很烦恼。如果你在这方面取得了任何进展,我很乐意阅读/听听你是如何运作的。也许下一步是去Appium Google Group。

编辑:我发现了我的核心问题 - 使用HAXM加速会导致空白屏幕截图。请注意,如果在选择“主机GPU”的情况下定义了测试功能中设置的基本设备配置文件,会影响物理设备上的测试运行。