iOS/Swift 中的 UI 测试

Posted

技术标签:

【中文标题】iOS/Swift 中的 UI 测试【英文标题】:UI Testing in iOS/Swift 【发布时间】:2019-04-25 09:37:50 【问题描述】:

我对 ios UITesting 还是很陌生。我目前正在使用XCTest 为我的应用程序编写 UITest。当点击特定按钮时,我能够测试UIElement 是可见还是隐藏。但我想测试点击按钮时是否调用了某个方法。这该怎么做?这是否经过 UI 测试?

我还想测试UIElements 仅在触发某些发送事件而不是点击时可见/隐藏。我们可以测试按钮的Touch DownTouch Up Inside 之类的发送事件吗?任何帮助表示赞赏。谢谢。

【问题讨论】:

【参考方案1】:

第一部分(测试元素是否可见/可点击)很简单:

let button = app.buttons["yourButton"]
let element = app.cells["yourElement"]

button.tap() //tapping the button, so the element appears

if element.exists == false 
  //fail the test with custom message


if element.isHittable == false 
  //fail the test with custom message


对于上述条件,您可以使用 XCTAsserts,但上述条件可能会因自定义消息而失败。另外 - 如果您的元素不立即可见,请使用 .waitForExistence 而不是 .exists

第二部分不应该(也不能)通过 UI 测试进行测试 - 如果您的元素在与它交互时发送正确的日志,您应该进行单元测试来检查。

是的,您可以(理论上)将断言与控制台输出一起使用,如@Βασίλης Δ's 中所建议的那样。答案,但这不是进行 UI 测试的正确方法。

【讨论】:

感谢您的快速回复。我能够测试测试的可见部分。我想测试我在UIButtonIBAction 方法中的代码是否仅在触发Touch Up Inside 发送事件时执行,而不是在触发Touch Drag Outside 时执行。有没有办法做到这一点。另外,如何检查点击按钮时是否调用了方法。 @Pradeep - 正如我所说,可以通过单元测试对其进行测试 - 检查此***.com/questions/18699524/…【参考方案2】:

您可以通过 UI 测试在技术上测试 Touch downTouch up inside 事件,但不是以非常干净的方式。

您可以通过在委托方法的末尾添加_touchdown_touchupinside 来修改元素的可访问性标识符。然后,在你的 UI 测试中, 您可以检查您的元素标识符是否包含标签。

【讨论】:

以上是关于iOS/Swift 中的 UI 测试的主要内容,如果未能解决你的问题,请参考以下文章

iOS/Swift:用于 UI 测试的“没有这样的模块...”

iOS Swift UI Tests (XCUITests) 稳定性问题 - fastlane scan

如何在 iOS + Swift 中关闭我的应用程序的 Internet 访问

iOS / Swift(UI)始终运行的后台计算线程的高效实现-GCD案例?

Firebase UI 身份验证提供程序 iOS Swift 示例

Stripe - 单一方法预构建 UI,STPAPIClient.shared().publishableKey iOS Swift UiKit