- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Android Studio 中创建一个 UI 测试,它将在我的应用程序的各个屏幕中导航,并在我告诉它时截取屏幕截图。
我一般是 Android Studio 和 Android 编程的新手;我对 XML 和 Java 有相当的了解,但我对构建文件了解不多,而且我似乎不太擅长使用 Android Studio。
几周前我开始了这项工作,我尝试的第一个解决方案是使用 uiautomator。但是,该页面上的文档(并且似乎几乎在其他任何地方)都是针对使用 Eclipse 进行开发的,如果可能的话,我想避免在这个项目中使用它。
我尝试的下一件事是浓缩咖啡。在我克服了在项目中实现 Espresso 的一些问题后,我能够使用 Espresso 编写测试,该测试将在我的应用程序屏幕中导航。但是,与 uiautomator 不同的是,Espresso 目前没有内置的截图功能。
我首先尝试通过编写自定义代码来解决 Espresso 无法截图的问题;由于我对 Android 还不熟悉,所以我不确定如何去做,所以我在 Internet 上搜索了帮助 (How to programmatically take a screenshot in Android?)。但是,我无法从测试文件中获得我发现的解决方案。
有人推荐使用这个工具:https://github.com/rtyley/android-screenshot-lib但我不知道如何将其导入我的项目。
我最终回到了 uiautomator;我仍然在将它导入我的项目时遇到了很多麻烦,有些人说 Robotium 会对此有所帮助。我让 Robotium 工作,但我仍然无法导入 uiautomator。
我开始使用 Android Studio 可能已经有一个月了,在那段时间里,我只是让软件正常运行就遇到了麻烦。为了简洁起见,我省略了我自己设法解决的所有问题,但是,坦率地说,我已经没有耐心了。
TL;DR
如果有人可以:
- 以最简单的方式解释如何将 uiautomator 导入 Android Studio 项目(我已经阅读了很多关于如何将外部库导入项目的文档,但它们都告诉我在我的项目中添加一个“libs”文件夹,但不指定使用哪种类型的文件夹 [Java 资源文件夹? Assets 文件夹?模块?等],和/或他们告诉我进入项目结构,选择我的应用程序,进入依赖项,然后选择“作为模块导入”,这不起作用...)
或者
-解释如何最好地从 Espresso 测试内部截取屏幕截图,包括有关如何导入任何所需库的任何说明
或者
- 详细解释一些其他方法来创建可以截屏的 UI 测试......
...我真的很感激。我花了几天时间试图弄清楚如何做到这一点,我很沮丧。很多人都问过类似的问题,但答案要么太模糊,要么与我的问题不够接近。
谢谢!
最佳答案
好吧,经过很多麻烦,我找到了一个非常简单的解决方案。我花了很长时间才解决,但如果其他人需要做类似的事情,我会在这里提出我的结论。
首先,似乎最容易与 Android Studio 一起使用的测试框架是 Espresso。设置 Espresso 相当简单;大部分说明可以在这里找到:https://code.google.com/p/android-test-kit/wiki/EspressoSetupInstructions确保你仔细阅读它——它基本上告诉你你需要知道的一切,但我错过了一些重要的细节,这给我带来了很多麻烦。
如果您浏览该 Espresso 网站,它会告诉您有关如何编写 Espresso 测试的所有信息。这对我来说有点令人沮丧,因为如果我写了一个测试并且测试失败了,我的设备就会与我的笔记本电脑出现连接问题,我必须断开并重新连接我正在使用的 USB 线。我认为这与我在 Windows 8 笔记本电脑上使用 Nexus 7 的事实有关,这在其他方面给我带来了一些问题,所以你自己可能不会遇到这个问题。
现在,与 uiautomator(其文档声称支持截屏)不同,Espresso 没有内置的截屏支持。这意味着您必须想出一种不同的方式来截取屏幕截图。我的解决方案是在我的 androidTest 包中创建一个新类(在我的例子中称为 HelperClass)并将此方法添加到其中。
public static void takeScreenshot(String name, Activity activity)
{
//slightly modified version of solution from http://www.ssaurel.com/blog/how-to-programmatically-take-a-screenshot-in-android/
//I added "/Pictures/" to my path because that's the folder where I wanted to store my screenshots -- you might not have that folder on your device, so you might want to replace "/Pictures/" with just "/" until you decide where you want to store the screenshots
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/" + name;
View v = activity.getWindow().getDecorView().getRootView();
v.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v.getDrawingCache());
v.setDrawingCacheEnabled(false);
OutputStream out = null;
File imageFile = new File(path);
//the following line will help you find where the screen will be stored on your device
Log.v("Screenshot", "The image file path is " + imageFile.getPath());
try {
out = new FileOutputStream(imageFile);
// choose JPEG format
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
} catch (FileNotFoundException e) {
// manage exception
} catch (IOException e) {
// manage exception
} finally {
try {
if (out != null) {
out.close();
}
} catch (Exception exc) {
}
}
}
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
HelperClass.takeScreenshot("Whatever you want to call the file", getActivity());
关于android-studio - 在 Android Studio 中创建可以在需要时截屏的 UI 测试的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28571185/
我制作手机游戏,但我想为我的社交游戏制作一些简单的基于浏览器的客户端,以便我们可以更轻松地调试。最简单的引擎是什么? 我研究了一些 HTML5 引擎和 GWT,但我想听听社区的意见。我正在寻找一种能够
有一个有趣的例子,有人设法为一个只占用 1kb 的论坛创建了一个 PHP 脚本:http://www.nerdparadise.com/blogs/blake/6034/ 我想知道是否有类似的小脚本可
首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真tm的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的,最浅显易
我的proguard配置太糟糕了,我的游戏崩溃了,而且似乎不正常。在我弄清楚到底哪里出了问题之前,最简单,最安全的配置用于全部安装是什么?有没有办法使它仅更改变量名?或者只是混淆代码以使其更难阅读而不
我正在重构一些 C# 代码,其中一部分是重做一些引用,因为我们正在完全重做文件夹结构。我想做的就是进入 .csproj 或 .sln 文件并修改路径。 然而,一些引用文献有类似的路径 "../../.
免责声明:这是一个理论问题,目的是增加我的理解。我知道我总是可以使用像 JSON 库这样的工具来解决问题。 假设我想创建一个逗号分隔的值列表,这些值本身可能包含逗号。这些逗号需要先转义。假设我使用 .
我对编程完全陌生,我选择 Delphi 作为我想学习的编程语言。 我基本上想构建使用套接字填写和提交 Web 表单的工具,并且我希望它们也是多线程的。 我希望它们功能丰富且性能正确。 我并不急于这样做
我正在构建一个协作创作工具,该工具允许用户共同编辑信息空间,该信息空间是节点和链接的可视化。一个客户端应用程序中所做的更改需要反映到所有其他客户端中。由于它是可视化的,因此可能需要经常更新潜在的大数据
作为一家专门开发自定义 CMS 的公司,我们被要求在下一个项目中部署开源 CMS。 我们可以自由选择系统。对于熟悉 PHP5 中的 MVC 模型和 OOP 的团队,您会推荐什么? 有人告诉我Drupa
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我完全是 Ember.js 菜鸟,需要了解后端注意事项,目前似乎很少有教程涵盖。对于快速原型(prototype)设计,最简单/最简单的后端设置是什么?我看到了一些 ember-rails 教程,但是
我正在寻找这种最简单、最简单的方法来启动 Java Web 服务。我曾经使用 Axis-1-on-Tomcat,但是对于 Axis 2,它变得太厚了。我正在寻找的一些偏好: 低内存占用 - 一个包含最
我多年来一直使用旧版 openGL 和 cocoa,但现在我正在努力过渡到 openGL 3.2。互联网上有几个例子,但它们都太复杂了(许多甚至在 XCode 5.1 下不再编译)。有人可以编写一个最
我正在构建一个简单的应用程序,它应该将开关/支票簿的状态存储 7 天。我遇到的唯一问题是我用来构建所述应用程序的网站不适合手机上的本地存储。没有通过本地存储或链接到在线数据库来存储开关/支票簿状态的良
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 个月前。 Improv
有时我需要 1 个用户类型元素的集合(或任何其他容器)并以这种方式创建它们: boost::assign::list_of(typeVariable).convert_to_container >()
我的页面上有一个 DropDownList 和一个 TextBox。当用户在 DropDownList 中选择“其他”选项时,我想在其右侧显示一个文本框。我不想使用传统的回发技术。我希望这种交互是在客
说到编码,我还很年轻,而且我听说过很多关于组织的事情。有些使用部分,有些使用 div,有些使用 div 作为按钮,其他使用 css 中的输入来更改它。作为一个喜欢让他的代码干净、简单易懂但又正确的人,
我需要将带有变量项的 ContentValues 转换为 JSON 字符串,我可以将其保存到数据库中,并在以后用作 HTTP 请求的正文。网络上的所有内容都只会以相反的方向进行转换。 最佳答案 每当您
我的电脑上安装了 Python 3.7。想用tensorflow,发现基本不支持3.7,所以想(也)安装Python 3.6。 关于如何做到这一点有什么建议吗?我是否必须卸载 3.7 并将其替换为 3
我是一名优秀的程序员,十分优秀!