XCUITest的一些好的做法

  //在您的ViewController上 
btnSend.accessibilityIdentifier =“ btn_send”
  //测试查询元素: 
app.buttons [“ btn_send”]。tap()

查看过渡

在实际显示视图之前,可能需要一些时间。 过渡动画,加载视图从Web或其他任何过程获取信息所消耗的时间。 因此,请确保在声明任何内容之前始终等待视图的存在。

 让resultView = app.otherElements [“ view_result”] 
让viewExists = resultView.waitForExistence(超时:10)
XCTAssert(viewExists)
  XCTAssert(app.staticTexts [“ Xcode字词的结果”] .exists) 

一个好的做法是识别每个UIViewController的视图 ,以便断言该视图是否存在,您不依赖于可以很容易更改的标签文本,而是依赖于可访问性标识符。

页面对象模式+方法链接

将有关每个ViewController的信息包装在不同的对象( Page )中。 这样,测试可以使用该对象而不是查询元素本身。

 类SearchPage { 
函数类型(查询:字符串)
func tapSend()
}
  //使用Pages进行测试: 
searchPage.type(查询:“ Xcode”)
searchPage.tapSend()

为了使测试更具可读性,您可以使用方法链接,如下所示:

 类SearchPage { 
函数类型(查询:字符串)->自我
func tapSend()-> ResultPage
}
  //使用Pages +方法链接进行测试 
searchPage
.type(查询:“ Xcode”)
.tapSend()

构架

为了使添加更多测试变得更加容易,请创建有助于您的团队的框架和指南。 从这里开始:https://goo.gl/bPYSyx

有用的日志

最后,您应该在测试失败时提供一些信息,特别是如果要使用Continuous Integration运行套件时。 我创建了一个log函数,并使用闭包允许测试在每个步骤之后运行一些操作。

  func type(查询:字符串,完成:(()-> Void)?= nil)-> Self { 
inputSearch.typeText(查询)
log(“ typed query:\(query)”)
完成吗?
返回自我
}

例如,您可以使用可选的完成闭包在步骤之后拍摄屏幕截图。

  searchPage 
.type(query:“ Xcode”){
takeScreeenShot()
}
.tapSend()

直到下一个版本

我正在一点一点地写这篇文章,只要有需要,我都会对其进行更新。 这些是目前的良好做法,但明天可能会改变。 任何反馈将不胜感激! 谢谢