运行 Espresso 测试时在 Android Studio 中找不到属性 android:forceQueryable

Posted

技术标签:

【中文标题】运行 Espresso 测试时在 Android Studio 中找不到属性 android:forceQueryable【英文标题】:attribute android:forceQueryable not found in Android studio when running Espresso test 【发布时间】:2020-11-05 15:18:08 【问题描述】:

我使用 Run 菜单中的 android studio Record Espresso Test 选项记录了我的 android 应用 Espresso 测试。在记录的最后,我用自己的文件名保存了测试。

点击保存按钮后,IDE 会自动在 app 模块的 AndroidTest 目录下创建文件。我右键单击保存的文件并单击运行。然后它提示我以下错误。

/Users/dehanwijesekara/Documents/ProjectName/app/build/intermediates/packaged_manifests/debugAndroidTest/AndroidManifest.xml:24: AAPT: error: attribute android:forceQueryable not found.

以下是上述链接中的文件。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dehan.pizzago.test" >

<uses-sdk
    android:minSdkVersion="23"
    android:targetSdkVersion="29" />

<instrumentation
    android:name="androidx.test.runner.AndroidJUnitRunner"
    android:functionalTest="false"
    android:handleProfiling="false"
    android:label="Tests for com.dehan.pizzago"
    android:targetPackage="com.dehan.pizzago" />

<queries>
    <package android:name="androidx.test.orchestrator" />
    <package android:name="androidx.test.services" />
    <package android:name="com.google.android.apps.common.testing.services" />
</queries>

<uses-permission android:name="android.permission.REORDER_TASKS" />

<application
    android:debuggable="true"
    android:extractNativeLibs="false"
    android:forceQueryable="true" >
    <uses-library android:name="android.test.runner" />

    <activity
        android:name="androidx.test.core.app.InstrumentationActivityInvoker$BootstrapActivity"
        android:theme="@android:style/Theme" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </activity>
    <activity
        android:name="androidx.test.core.app.InstrumentationActivityInvoker$EmptyActivity"
        android:theme="@android:style/Theme" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </activity>
    <activity
        android:name="androidx.test.core.app.InstrumentationActivityInvoker$EmptyFloatingActivity"
        android:theme="@android:style/Theme.Dialog" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </activity>
</application>

我使用的是 Android Studio 4.1

请指教。

【问题讨论】:

可能与github.com/android/android-test/issues/743 有关。您可以尝试使用 AndroidX 测试库的 1.3.1-alpha02 版(或更高版本)吗? 我不确定这是否会有所帮助。我最近也遇到了这个问题。当我在 build.gradle(app) 中使用 androidTestImplementation 'androidx.test:rules:1.3.0-alpha03' 而不是 androidTestImplementation 'androidx.test:rules:1.3.1-alpha02' 时,我得到了它。 ActivityTestRule 在较新版本中已弃用。 亲爱的@gosr 我试过没用。我找到了解决方案并检查了它。 亲爱的@hypergogeta,我试过你的建议也没有奏效。我找到了解决方案并检查了它。 【参考方案1】:

这就是我所做的。

在 espresso 录制结束时,我注意到 Android Studio 会自动将以下库添加到应用级别的 Gradle build.xml 文件中。

androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.4.0-alpha02'

以下是我根据espresso setup guide in google android developers document自己手动添加的其他库。

androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
androidTestImplementation 'androidx.test:runner:1.1.0'
androidTestImplementation 'androidx.test:rules:1.1.0'

然后我将上面的库更新到最新版本如下(因为android studio建议使用最新版本,所以我更新了)。

androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
androidTestImplementation 'androidx.test:runner:1.3.0'
androidTestImplementation 'androidx.test:rules:1.3.0'

然后我使espresso-contrib的版本等于espresso-core,如下所示

androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.3.0'

注意,现在espresso-contribespresso-core 的版本都是3.3.0

我也从我的 gradle 构建文件中删除了以下库,没有检查,如果它们持续存在会发生什么。因为我的目的不是测试,而是作为一种机器人程序不断地完成一项任务。

testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'

终于成功了,我认为问题中出现上述错误的原因是版本不匹配。

【讨论】:

我必须保留 Junit 库,而这个解决方案不起作用。希望在下一个 espresso 稳定版本中得到修复 这对我有用,我有 espresso 3.4.0-alpha02,在我将它设置为 3.3.0 后,错误就消失了。 @CodigoMorsa 感谢您让大家知道。【参考方案2】:

在我的例子中,这个配置是有效的。

androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.4.0-alpha03'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0-alpha03'
androidTestImplementation 'androidx.test:runner:1.3.1-alpha03'
androidTestImplementation 'androidx.test:rules:1.3.1-alpha03'

【讨论】:

以上是关于运行 Espresso 测试时在 Android Studio 中找不到属性 android:forceQueryable的主要内容,如果未能解决你的问题,请参考以下文章

Android Espresso - 如何为所有测试只运行一次设置

如何使用 android studio 运行单个 espresso 测试功能?

Android Espresso UI 测试 - 测试运行失败:仪器运行因“java.lang.IllegalAccessError”而失败

Android Marshmallow:使用 Espresso 测试权限?

Android Espresso单元测试

Android - Espresso:为每次测试重新创建活动