我正在为我的应用程序编写UI测试。
屏幕更新后如何刷新app.buttons
/ app.otherElements
列表?
实施例:
我在登录屏幕上按下登录按钮,等待服务器响应。
响应到达后,我看到另一个屏幕,需要按下按钮,但是button.exists == NO
。
每次屏幕更新时,我应该制作新的应用实例([[XCUIApplication alloc] init]
吗?
答案 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上可用的视图层次结构。