屏幕更新后刷新应用程序的XCUIElementQuery

时间:2016-10-10 08:43:11

标签: ios xcode-ui-testing

我正在为我的应用程序编写UI测试。 屏幕更新后如何刷新app.buttons / app.otherElements列表?

实施例: 我在登录屏幕上按下登录按钮,等待服务器响应。 响应到达后,我看到另一个屏幕,需要按下按钮,但是button.exists == NO

每次屏幕更新时,我应该制作新的应用实例([[XCUIApplication alloc] init]吗?

2 个答案:

答案 0 :(得分:2)

您应该在登录accessibilityIdentifier后授予您要点按的按钮,然后等待该按钮存在。这样可以确保您不会尝试与应用进行互动,直到新的用户界面加载完毕,而不仅仅是旧的用户界面已经消失。

我强烈建议提取"等待此元素出现"根据Joe Masilotti的优秀指南here(尽管你必须在ObjC中重新实现它们,因为他在Swift中编写了它们)。

答案 1 :(得分:1)

您应该等待登录屏幕上的唯一元素,等待登录操作完成。

XCUIElement *logInButton = app.buttons["signInButton"];

// Tap the log in button
[logInButton tap];

// Wait for the login operation to complete
NSPredicate *notExistsPredicate = [NSPredicate predicateWithFormat:@"exists == false"];
[self expectationForPredicate:notExistsPredicate evaluatedWithObject:logInButton handler: nil];
[self waitForExpectationsWithTimeout:10.0 handler: nil]; // Adjust timeout as needed

这将确保在屏幕内容更改时刷新XCUIApplication上可用的视图层次结构。