gpt4 book ai didi

Android Espresso 自动化测试中的谓词?

转载 作者:行者123 更新时间:2023-11-30 01:12:37 25 4
gpt4 key购买 nike

有什么方法可以实现类似于 iOS Xcode 中的 NSPredicate 的谓词来等待 Android Espresso 中的某些事件?

对于 iOS,您可以调用 expectationForPredicatewaitForExpectationsWithTimeout 作为 XCTest 的一部分。

我负责测试两个类似的 iOS 和 Android 应用程序。在 iOS 中,我可以执行以下操作:

  let app = XCUIApplication();
let condition = app.staticTexts["Text That Displays After Event"]
let exists = NSPredicate(format: "exists == true")
expectationForPredicate(exists, evaluatedWithObject: condition, handler: nil)
waitForExpectationsWithTimeout(5, handler: nil)

XCTAssert(app.staticTexts["Text That Displays After Event"].exists)

在 Android 中,我能做的最好的事情就是注册一个空闲资源并等待几秒钟,然后检查事件是否已手动发生。

  long waitingTime = 3 * DateUtils.SECOND_IN_MILLIS;
IdlingPolicies.setMasterPolicyTimeout(waitingTime * 2, TimeUnit.MILLISECONDS);
IdlingPolicies.setIdlingResourceTimeout(waitingTime * 2, TimeUnit.MILLISECONDS);
IdlingResource idlingResource = new ElapsedTimeIdlingResource(waitingTime);
Espresso.registerIdlingResources(idlingResource);

onView(withId(R.id.id_in_next_event)).check(matches(isDisplayed()));

Espresso.unregisterIdlingResources(idlingResource);

我相信一定有更好的方法来做到这一点。

最佳答案

大多数事情都可以通过 Instrumentation#waitForIdleSync() 方法完成。这会等待所有 UI 事件在继续之前得到处理。假设您有一个 ID 为 buttonId 的按钮,当按下该按钮时,它将显示一个 ID 为 hiddenView 的 View 。

如果你这样做:

private final Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();

@Test
public void checkViewIsRevealed() {
onView(withId(R.id.buttonId)).perform(click());

instrumentation.waitForIdleSync();

onView(withId(R.id.hiddenView)).check(matches(isDisplayed());
}

所以在这个过程中,执行“点击”会调用 hiddenView 上的 View#setVisibility()。然后,您等待空闲以确保所有 UI 操作都通过。然后检查是否显示了新 View 。

关于Android Espresso 自动化测试中的谓词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38268405/

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