iOS/Swift 中的 UI 测试
Posted
技术标签:
【中文标题】iOS/Swift 中的 UI 测试【英文标题】:UI Testing in iOS/Swift 【发布时间】:2019-04-25 09:37:50 【问题描述】:我对 ios UITesting 还是很陌生。我目前正在使用XCTest
为我的应用程序编写 UITest。当点击特定按钮时,我能够测试UIElement
是可见还是隐藏。但我想测试点击按钮时是否调用了某个方法。这该怎么做?这是否经过 UI 测试?
我还想测试UIElement
s 仅在触发某些发送事件而不是点击时可见/隐藏。我们可以测试按钮的Touch Down
或Touch 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 测试的正确方法。
【讨论】:
感谢您的快速回复。我能够测试测试的可见部分。我想测试我在UIButton
的IBAction
方法中的代码是否仅在触发Touch Up Inside
发送事件时执行,而不是在触发Touch Drag Outside
时执行。有没有办法做到这一点。另外,如何检查点击按钮时是否调用了方法。
@Pradeep - 正如我所说,可以通过单元测试对其进行测试 - 检查此***.com/questions/18699524/…【参考方案2】:
您可以通过 UI 测试在技术上测试 Touch down
和 Touch 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