如何暂停 XCUITest 以进行手动模拟器操作?

Posted

技术标签:

【中文标题】如何暂停 XCUITest 以进行手动模拟器操作?【英文标题】:How to pause XCUITest for manual Simulator manipulation? 【发布时间】:2018-11-11 20:31:08 【问题描述】:

我正在尝试使用 XCUITest 自动化我的部分 UI 测试。我不想让测试自动做部分测试,然后等我手动做一些事情。有什么好办法吗?

现在我只是这样做:

class QDBUITestHost: XCTestCase 

  override func setUp() 
    continueAfterFailure = false
    XCUIApplication().launch()
  

  override func tearDown() 

  func testHosting() 
    let app = XCUIApplication()
    app.buttons["Select Group"].tap()
    app.sheets.buttons["com-mist-qdb-1"].tap()
    app.buttons["Host"].tap()
    sleep(600) // This is an ugly hack
  


那么,除了sleep(600),还有更好的方法吗?

【问题讨论】:

在 XCUITest 中添加断点... UITests 的全部意义在于自动化 UI 测试。如果您需要干预它,您要么没有完全设置它们,要么它正在进行中,不妨手动测试。正如其他人所说,您可以使用断点,但如果您需要等待 10 分钟,我怀疑您在将测试置于待机状态时正在运行一些更改,因此手动测试,一旦您知道要实现的目标,请设置您的可访问性标识符在所有组件上? 我总体上赞同 Alex 的概念,但还想指出一些事情。无论是通过sleep(x) 还是断点,您都会完全停止测试过程,这可能不是一个好主意(因为它包含一些幕后的东西来跟踪正在测试的应用程序,例如它检查应用程序变为空闲,如日志所示)。这可能会使整个过程不仅是一种糟糕的方法,而且变化无常。也许您想编辑问题以解释您为什么要这样做?也许这为您提供了一种更好的方法来解决您试图解决的可能只是感知到的问题。 这感觉像是一个 XY 问题,如果您可以提供更多详细信息来说明您究竟需要暂停什么,那么可能会以更好的方式解决。这可能有助于实现整个套件的自动化,如果您希望定期自动测试代码(例如在 CI 服务器上),这将是必需的。 【参考方案1】:

有一个xctwaiter 框架。

您可以使用期望来等待结果。它们非常灵活。

let result = XCTWaiter().wait(for:[expectation], timeout: 10)

如何使用您可以在文档中看到的期望。 An example.

【讨论】:

以上是关于如何暂停 XCUITest 以进行手动模拟器操作?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用 XCUITest 测试快速操作?

如何在 XCUITest 中进行“页面”对象设计

XCUITest - 如何模拟设备锁定

如何在 iOS XCUITest 期间配置 Firebase

带有 PACT 的 XCUITest 不返回模拟网络响应

XCUITest 等待可能出现的元素