如何在iOS上的UI测试中测试是否启用了navigationBar按钮?

Eug*_*din 6 objective-c ios xctest

在我的iOS应用程序中,我添加了UI测试,我需要检查导航栏按钮是否在不同的时间启用/禁用.

目前我正在使用:

XCUIElement* saveButton = self.app.navigationBars[@"TSSIDAddCardView"].buttons[@"Save"];


XCTAssertEqual(saveButton.hittable, YES);
Run Code Online (Sandbox Code Playgroud)

但是,这始终返回YES..exists测试也返回YES.

有谁知道如何进行正确的测试?

Sli*_*son 5

XCUIElement符合XCUIElementAttributes,它提供@property(readonly, getter=isEnabled) BOOL enabled;.

所以你可以在你的XCUIElement* saveButton

目标-C

XCTAssertEqual(saveButton.enabled, YES);
Run Code Online (Sandbox Code Playgroud)

迅速

XCTAssertEqual(saveButton.isEnabled, true)
Run Code Online (Sandbox Code Playgroud)


Eug*_*din 1

因此,在@InsertWittyName 的帮助下,我找到了解决方案:

UIBarButtonItem *saveButton = self.app.navigationBars[@"TSSIDAddCardView"].buttons[@"Save"];
XCTAssertFalse(saveButton.enabled);
Run Code Online (Sandbox Code Playgroud)

  • 我认为这不起作用,因为您正在访问“UIBarButtonItem”。在您的示例中,“saveButton”实际上仍然是“XCUIElement”,并且符合“XCUIElementAttributes”协议,该协议具有“enabled”/“isEnabled”属性。您可以测试这个打印“[[saveButton class] description]”。你的例子之所以有效,是因为 Objective-C 动态调度的松散性;然而,它在 Swift 中不起作用。基本上,将“UIBarButtonItem *saveButton =”更改为“id saveButton =”或“XCUIElement *saveButton =”,您会发现功能是相同的。 (2认同)