我的代码编译.代码中没有错误.我下载了完整的SDK.在运行中我收到此错误:
Can't find API database; API check not performed
Run Code Online (Sandbox Code Playgroud)
它位于位置:第1行,键入Android Lint问题.
我不知道什么是错的.
我的代码行有问题:
String path = MediaStore.Images.Media.insertImage(activity.getContentResolver(), bitmap, "feedback", null);
Run Code Online (Sandbox Code Playgroud)
Activity不为null,位图不为null.
我收到错误:
0-22 11:23:59.644 29514-29527/? E/DatabaseUtils: Writing exception to parcel
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils: java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=1380, uid=10136 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils: at android.content.ContentProvider.enforceWritePermissionInner(ContentProvider.java:679)
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils: at android.content.ContentProvider$Transport.enforceWritePermission(ContentProvider.java:494)
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils: at android.content.ContentProvider$Transport.insert(ContentProvider.java:258)
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils: at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:163)
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils: at android.os.Binder.execTransact(Binder.java:453)
10-22 11:23:59.645 1380-1467/? E/MediaStore: Failed to insert image
10-22 11:23:59.645 1380-1467/? E/MediaStore: java.lang.SecurityException: Permission …Run Code Online (Sandbox Code Playgroud) 我想弄清楚,如何使用Espresso重新运行失败的测试.我认为从常见的JUnit测试案例来看,这有点复杂,因为您需要在测试开始之前恢复应用中的状态.
我的方法是创建自己的ActivityTestRule,所以我只是从这个类中复制了整个代码,并将其命名为MyActivityTestRule.
在仪器测试的情况下,规则还需要有关我们如何开始活动的信息.我更愿意自己推出它而不是为我做环境.例如:
@Rule
public MyActivityTestRule<ActivityToStartWith> activityRule = new MyActivityTestRule<>(
ActivityToStartWith.class, true, false
);
Run Code Online (Sandbox Code Playgroud)
所以我也在@Before注释方法中启动我的活动:
@Before
public void setUp() throws Exception {
activityRule.launchActivity(new Intent());
}
Run Code Online (Sandbox Code Playgroud)
并在@After注释方法中进行清理:
@After
public void tearDown() throws Exception {
cleanUpDataBaseAfterTest();
returnToStartingActivity(activityRule);
}
Run Code Online (Sandbox Code Playgroud)
这些方法 - setUp(),tearDown()是每次测试运行之前/之后调用的必要条件 - 以确保测试开始期间的应用程序状态是正确的.
在MyActivityTestRule中,到目前为止我做了一些修改.首先是应用方法的变更来自:
@Override
public Statement apply(final Statement base, Description description) {
return new ActivityStatement(super.apply(base, description));
}
Run Code Online (Sandbox Code Playgroud)
这对我来说是未知的,但是事情,如ActivityStatement放在ActivityTestRule有super.apply方法,因此也包装测试语句UiThreadStatement:
public class UiThreadStatement extends Statement {
private final Statement mBase;
private final boolean mRunOnUiThread;
public UiThreadStatement(Statement base, boolean runOnUiThread) {
mBase = base; …Run Code Online (Sandbox Code Playgroud) 我正在尝试进行测试指纹的集成测试。
根据谷歌文档从终端调用模拟器上的手指触摸,您需要使用:
adb -e emu 手指触摸 <finger_id>
这对我有用。在我的例子中 id 是 45146572。但是在测试中你不能自己输入这个命令,因为它应该自动完成。
我一直在尝试各种方法来解决问题(例如,试图了解应用程序如何从传感器接收信息 - 也许通过某种广播意图等),现在我仍然不知道该怎么做。
我知道 UiAutomation 和 UiAutomator 的类 - UiDevice 有方法
我认为这可能会有所帮助。但即使我做了类似的事情:
getUiDevice().executeShellCommand("-e emu finger touch 45146572");
Run Code Online (Sandbox Code Playgroud)
我的设备不会对它做出反应(我已经尝试过两个类和各种线程)。我相信这是由于 executeShellCommand 已经在 shell 中运行造成的。所以这就像我打字到终端
Kamils-MacBook-Pro:~ F1sherKK$ adb shell
root@generic_x86_64:/ #
Run Code Online (Sandbox Code Playgroud)
我想这就是问题所在,因为谷歌想要:
adb -e emu finger touch
Run Code Online (Sandbox Code Playgroud)
不是
adb shell -e emu finger touch
Run Code Online (Sandbox Code Playgroud)
我对 shell 的了解可能还不够。我已经多次查看所有文档。
你知道如何从外壳调用手指触摸吗?
我正在使用android espresso.我在包中放置了各种"类型"的仪器测试.例如"mypackage.loginScreenTests","mypackage.paymentScreenTests","mypackage.registerScreenTests"等.
到目前为止,我正在同时运行所有这些.虽然我只运行例如loginScreenTests,但测试往往会相互影响导致故障的因素.
从我那里读到:http: //developer.android.com/tools/testing-support-library/index.html#ajur-sharding
我可以创建3个分片并将每组测试放在不同的分片上,然后按id运行它们 - 比如0,然后是1,然后是2.但是我找不到任何示例和文档对我来说有点不清楚.
我知道如何使用shard id运行测试,但我不知道如何将位于*.java文件中的测试划分为分片.有人可以向我解释一下吗?
最近我需要测试RecyclerView,我在使用它时遇到了很多麻烦.
首先,我通过向我们提供位于espresso-contrib中的 RecyclerViewActions来了解Espresso已经"支持"RecyclerViews .所以我决定使用它,我的依赖关系看起来像这样:
dependencies {
androidTestCompile 'junit:junit:4.12'
androidTestCompile 'com.squareup.spoon:spoon-client:1.2.1'
androidTestCompile 'com.jraska:falcon-spoon-compat:0.3.1'
androidTestCompile 'com.android.support:support-annotations:23.1.1'
androidTestCompile 'com.android.support.test:runner:0.4.1'
androidTestCompile 'com.android.support.test:rules:0.4.1'
androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.1'
androidTestCompile "org.mockito:mockito-core:1.10.19"
androidTestCompile "com.google.dexmaker:dexmaker:1.2"
androidTestCompile "com.google.dexmaker:dexmaker-mockito:1.2"
}
Run Code Online (Sandbox Code Playgroud)
但是,只有在尝试将espresso-core改为espresso-contrib后才尝试运行我的测试.我可以看到这个错误:
Test running failed: Instrumentation run failed due to 'java.lang.IncompatibleClassChangeError'
Run Code Online (Sandbox Code Playgroud)
我试着把它谷歌出来.我看到很多话题,人们都在回答这样的问题.所以我排除了appcompat,supportv4和recyclerview-v7.像那样:
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.1') {
exclude group: 'com.android.support', module: 'appcompat'
exclude group: 'com.android.support', module: 'support-v4'
exclude module: 'recyclerview-v7'
}
Run Code Online (Sandbox Code Playgroud)
测试开始但是......我不能使用任何RecyclerViewActions.因为在排除了recyclerview-v7后没有任何方法,我在网上看到的几乎所有地方都推荐使用.当我尝试使用 - RecyclerViewActions.actionOnItemAtPosition - 我的核心方法时,我收到此错误:
java.lang.NoSuchMethodError: No virtual method findViewHolderForPosition(I)Landroid/support/v7/widget/RecyclerView$ViewHolder; in class Landroid/support/v7/widget/RecyclerView; or its super classes (declaration of 'android.support.v7.widget.RecyclerView' appears in …Run Code Online (Sandbox Code Playgroud) 我需要在我的 Android 设备上打开 PIN 码和指纹安全功能。
可以这样做:
要么通过java代码编程 - 如果您知道可以处理它的类,请告诉我(例如,如果您有权限,IWindowManagerImpl.java可以通过反射从java代码修改设备上的动画)
通过在应用程序构建期间执行的 adb shell 命令 - 如果您知道如何从终端执行此操作的命令,请告诉我
还有其他解决方案吗?
我可以获得我的应用程序中的所有权限。我不关心速度或解决方案有多干净,它也可以通过反射来完成。
有人尝试过吗?
您好我正在使用OpenCV4Android人脸检测样本.我想知道如何获得我的相机分辨率并将其设置为其他值.在此示例中,CameraBridgeViewBase.
我看到了对象
private CameraBridgeViewBase mOpenCvCameraView;
Run Code Online (Sandbox Code Playgroud)
我可以用
mOpenCvCameraView.setLayoutParams();
Run Code Online (Sandbox Code Playgroud)
但每当我尝试以某种方式使用它时,我做错了,我的程序崩溃了.请帮我解决这个问题.
我想设置.apk文件,用于使用SpoonGradlePlugin运行我的测试.
我可以通过gradle文件以编程方式设置可用的属性:
但我的项目有各种口味和名称,我想测试它们.通过当前设置,我得到:
* What went wrong:
A problem was found with the configuration of task ':app:spoonDebugAndroidTest'.
> File '/Users/F1sherKK/Dev/MyApp-Android/app/build/outputs/apk/app-debug.apk' specified for property 'applicationApk' does not exist.
Run Code Online (Sandbox Code Playgroud)
我的构建名称是:
app-debug-androidTest-unaligned.apk
MyApp-debugA-1.2.3-201.apk
MyApp-debugB-1.2.3-201.apk
MyApp-debugC-1.2.3-201.apk
Run Code Online (Sandbox Code Playgroud)
这就是为什么我想在gradle代码中设置我的.apk - 或者控制台.到目前为止我发现Spoon Gradle插件中有可用的字段:
名字:
/** Instrumentation APK. */
@InputFile
File instrumentationApk
/** Application APK. */
@InputFile
File applicationApk
Run Code Online (Sandbox Code Playgroud)
但我不能在SpoonExtension.groovy中访问gradle中的属性.
有没有办法设置这些字段?
//编辑 - 添加了一些尝试:这是我的基础配置:
spoon {
debug = true
baseOutputDir = file("$buildDir/spoon-log")
if (project.hasProperty('spoonClassName')) {
className = project.spoonClassName
if (project.hasProperty('spoonMethodName')) {
methodName = project.spoonMethodName
}
} …Run Code Online (Sandbox Code Playgroud) 您好,我需要在测试中单击Web视图。webView代码中的按钮具有以下代码:
<input type="submit" onclick="ignoreClose()" name="UsernamePasswordEntry" value="Submit">
Run Code Online (Sandbox Code Playgroud)
我尝试这样处理:
onWebView().withElement(findElement(Locator.NAME, "UsernamePasswordEntry")).perform(webClick());
Run Code Online (Sandbox Code Playgroud)
但是我得到:
java.lang.RuntimeException: java.lang.RuntimeException: Atom evaluation returned null!
Run Code Online (Sandbox Code Playgroud)
有什么办法处理吗?
android ×10
gradle ×2
java ×2
shell ×2
adb ×1
api ×1
eclipse ×1
groovy ×1
junit ×1
mediastore ×1
opencv ×1
permissions ×1
resolution ×1
sdk ×1
spoon ×1
unit-testing ×1
webview ×1