这不是一个重复的问题。
我已经看过类似的问题。我已经添加了我上次提到的问题。
我的问题是测试执行了,但我必须为每个测试手动打开应用程序。
你可以看到我等了18秒才打开应用程序。它会等到我手动打开应用程序或超时后显示此错误。
活动永远不会变成请求的状态“[DESTROYED、RESUMED、STARTED、CREATED]”(最后一个生命周期转换=“PRE_ON_CREATE”)
从这篇文章,我认为问题出在我正在使用的设备上
Redmi Note 5
。disabled animations
以及 MIUI optimization
选项。
感谢您提供在小米设备上自动运行测试的帮助。
手动运行自动化 UI 测试没有意义。
更新1
它仅针对启动器/主要活动执行。
它不适用于其他活动。
更新2
我也碰巧有一台 Redmi 4。测试按预期在该设备上运行,无需更改任何代码。
提到的SO问题
以及相关问题,
为任何想要查看的人添加代码片段和依赖项,
测试代码
import androidx.test.core.app.ActivityScenario
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.*
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4ClassRunner::class)
class MainActivityTest {
@Test
fun test_isActivityInView() {
val activityScenario = ActivityScenario.launch(MainActivity::class.java)
onView(withId(R.id.layout_activity_main)).check(matches(isDisplayed()))
}
}
依赖关系
testImplementation "junit:junit:4.13.2"
androidTestImplementation "androidx.test:core:1.4.0"
androidTestImplementation "androidx.test:runner:1.4.0"
androidTestImplementation "androidx.test:rules:1.4.0"
androidTestImplementation "androidx.test.ext:junit-ktx:1.1.3"
androidTestImplementation "androidx.test.espresso:espresso-core:3.4.0"
这是权限问题。只需在您的 Android 手机设置中允许此应用程序自动启动和弹出窗口即可。
然后启动 USB 调试并允许测试应用程序chain-start。
它对我来说在小米11青春版上有效。
您可以在设置->应用程序->管理应用程序中找到这些设置 ->您的应用程序->权限
我也有同样的问题。 有时会因为使用而出现问题
androidTestImplementation 'androidx.fragment:fragment-testing:1.3.6'
而不是
debugImplementation 'androidx.fragment:fragment-testing:1.3.6'
如果您的测试场景中有片段,请使用
debugImplementation
添加此依赖项,然后再次检查。
感谢这篇文章的回答。
我在 Android 11 设备上遇到以下错误
java.lang.AssertionError:活动永远不会变为请求状态“[STARTED、RESUMED、CREATED、DESTROYED]”(最后一个生命周期转换=“PRE_ON_CREATE”)
我在这上面浪费了大量时间,当我将设备切换到 Android 10 时找到了解决方案。
如果有人遇到此类问题,请执行以下操作来解决它,
我正在使用 API 30 的虚拟 Pixel 2 中进行测试。“设置”中没有“自动启动”或“弹出”选项。简而言之,此消息表示无法打开该 Activity,因此如果您在虚拟设备或真实设备中手动打开您的应用程序,测试将运行。
我的问题是,我的 Android 11 Redmi Note 10s 上有一个更新正在等待我,在更新并执行其他建议的答案后,它起作用了!
检查是否在
getIntent().setAction()
方法上调用了 onCreate
,如果是则将其删除。
这就是我在我的案例中“解决”的方法。
就我而言,我测试了 Compose 片段以及普通片段。我添加了库:
androidTestImplementation("androidx.compose.ui:ui-test-junit4:1.6.0")
debugImplementation("androidx.compose.ui:ui-test-manifest:1.6.0")
在测试中我添加了规则:
@get:Rule
val activityRule = ActivityTestRule(MainActivity::class.java, true, false)
@get:Rule
val composeTestRule = createAndroidComposeRule<MainActivity>()
然后开始测试:
@Before
open fun setUp() {
activityRule.launchActivity(null)
}
并得到此异常:“java.lang.AssertionError:活动永远不会变为请求状态“[DESTROYED]”(最后一个生命周期转换=“PAUSED”)”。
然后我将一条规则替换为:
@get:Rule
val composeTestRule = createComposeRule()