gpt4 book ai didi

java - 在 Espresso 中应用未闲置时强制执行操作 - Android

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:27 24 4
gpt4 key购买 nike

很多人问过如何让 Espresso 框架等待后台任务完成,然后再执行操作或声明某些内容。我了解在这些情况下,IdlingResource 通常是答案。

我的问题有点相反。我有一个 Espresso 默认等待的倒计时,因为 ProgressBar 已更新。在此倒计时期间,我有一种“取消”按钮来停止倒计时。

我要编写的测试将设置后台任务并检查取消按钮是否使应用程序返回到上一个屏幕。现在它等待后台任务完成,然后再尝试单击取消按钮,但取消按钮在任务完成后消失。

我如何“强制”Espresso 执行某项操作(点击取消),即使该应用未处于空闲状态?

最佳答案

老实说,我认为这是不可能的。我有同样的问题。我通过使用 UIAutomator 单击(在您的情况下)取消按钮来修复它。

在我的例子中,我有一个登录按钮,之后有一张 map 。该应用程序在登录按钮后永远不会闲置,甚至只是在 MapFragment 中(Espresso 的问题),所以我不得不使用 UIAutomator 作为登录按钮并检查 map 是否在登录后出现。

我将其添加到应用程序的依赖项中:

androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'

在我的 LoginTest.kt 文件中:

import androidx.test.uiautomator.*
//your imports here

@RunWith(AndroidJUnit4::class)
@LargeTest
class LoginTest {
@Rule
@JvmField
//your rules here
lateinit var mDevice:UiDevice


@Before
fun setUp() {
//your setUp stuff
mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())

}

@Test
fun checkLogin(){
onView(withId(R.id.loginBtn)).perform(click()) //goes to LoginFragment

mDevice.findObject(UiSelector().text("LOGIN")).click() //clicks login button
//this is where I had to use the UIAutomator because espresso would never be
//idle after the login button

mDevice.wait(Until.findObject(By.text("YOU HAVE LOGGED IN")),15000)
//this waits until the object with the given text appears, max. wait time is 15 seconds
//as espresso would still not be idle, I had to check if the login was successful
//with (again) the help of UIAutomator
}

@After
fun tearDown() {

}

}

希望对大家有帮助

关于java - 在 Espresso 中应用未闲置时强制执行操作 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46414164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com