UI 测试标签栏控制器

UI testing a tab bar controller

我构建了一个带有 3 个选项卡的简单选项卡栏。

我想 运行 UI 测试以确保如果用户单击选项卡栏项目,将显示正确的视图控制器。我该怎么做呢?下面是我要开始的代码,只是不知道如何写我的断言。

func testTabBarMyProfileButton() {
    let tabBarsQuery = XCUIApplication().tabBars
    tabBarsQuery.buttons["My Profile"].tap()
}

func testTabBarGraphsButton() {
    let tabBarsQuery = XCUIApplication().tabBars
    tabBarsQuery.buttons["Graphs"].tap()
}

func testTabBarAboutButton() {
    let tabBarsQuery = XCUIApplication().tabBars
    tabBarsQuery.buttons["About"].tap()
}

您可以测试导航栏的标题。

XCTAssert(app.navigationBars["Graphs"].exists)

参见my GitHub repo for a more detailed UI Testing example

如果您在每个选项卡栏上显示的每个视图控制器中有不同的控件,您可以断言它们是否存在(这是预期的)。 例如,如果第一个标签栏有一个名为 "First name" 的 UILabel,您可以通过编写

来断言它是否存在
Let theLabel = app.staticTexts["myValue"]
XCTAssert(theLabel.exists).to(beTrue)

在其他屏幕上对不同的控件执行相同的操作。

如果有人发现这个正在寻找 UI 测试另一个应用程序的内容,我刚刚找到了解决方案..

标签栏项目是一个惰性变量,需要在您按值引用标签栏按钮之前对其进行修改。添加此行:

tabBarItem.accessibilityIdentifier = "my-snazzy-identifier"

添加到 viewDidLoad 方法,您应该能够在 UI 测试中执行此操作:

app.tabBars.buttons["Button Title"].tap()

您可以通过其位置访问标签栏按钮:

app.tabBars.buttons.element(boundBy: 2).tap()