UITesting,XCTest当前的ViewController类

Dej*_*uza 17 ios xctest swift xcode-ui-testing

简单的问题.我得到了对下一个视图控制器执行segue的按钮.我想写UI XCTest告诉我它是否打开了我想要的视图控制器.

Joe*_*tti 35

UI测试框架无法访问您的应用程序代码,这使得实例上的类断言变得不可能.您无法直接告诉屏幕上的控制器类.

但是,如果你考虑一下你的测试,你可以做一个非常相似的断言.像对待用户一样编写测试.您的用户不关心,如果他/她是在寻找一个ItemDetailViewController或一个ItemListTableViewController如此也不应该你的测试.

用户关心屏幕上的内容.标题是什么?或者,这些按钮的名称是什么?遵循该逻辑,您将基于这些项重写您的测试以断言,而不是编码类的名称.

例如,如果您在导航堆栈中显示控制器,则可以断言标题.

let app = XCUIApplication()
app.buttons["View Item"].tap()

XCTAssert(app.navigationBars["Some Item"].exists)
Run Code Online (Sandbox Code Playgroud)

或者,如果屏幕以模态方式呈现,但您知道某些静态文本或按钮,请使用它们.

let app = XCUIApplication()
app.buttons["View Item"].tap()

XCTAssert(app.staticTexts["Item Detail"].exists)
XCTAssert(app.buttons["Remove Item"].exists)
Run Code Online (Sandbox Code Playgroud)

  • 我觉得必须有一个更好的方法来做到这一点......如果你在应用程序中更改文本会怎样?如果您在应用中有多个文本本地化会怎样?如果文本需要改变,它似乎需要进行大量的测试,如果它是本地化的,并且可能会引起维护问题. (5认同)
  • 就我而言,我必须在 `app.buttons["View Item"].tap()` 之前使用 `sleep(1)` 才能使其工作 (2认同)