【问题标题】:iOS UI Test: Wait for exist fails for dynamically added buttoniOS UI 测试:动态添加按钮等待存在失败
【发布时间】:2020-06-09 03:21:55
【问题描述】:

我的应用程序在启动时会自动更新和初始化 SDK。完成后,我将添加一个按钮来检查我的 UI 测试中是否完成了自动更新和初始化:

let hiddenButton = UIButton(frame: CGRect(x: 0, y: 0, width: 1, height: 1))
hiddenButton.setTitle("databaseUpdated", for: .normal)
hiddenButton.accessibilityIdentifier = "databaseUpdated"
self.view.addSubview(hiddenButton)

我尝试了以下几行来检查它,但总是失败:

XCTAssertTrue(app.descendants(matching: .button)["databaseUpdated"].waitForExistence(timeout: 60))
XCTAssertTrue(app.children(matching: .button)["databaseUpdated"].waitForExistence(timeout: 60))
XCTAssertTrue(app.otherElements["databaseUpdated"].waitForExistence(timeout: 60))
XCTAssertTrue(app.buttons["databaseUpdated"].waitForExistence(timeout: 60))

我已使用Debug View Hierarchy 确认我的按钮在视图层次结构中:

更新

我决定在viewDidLoad 中添加具有不同标识符的按钮,并在 SDK 初始化时更新它:

private let button = UIButton(frame: CGRect(x: 0, y: 0, width: 1, height: 1))

override public func viewDidLoad() {
    super.viewDidLoad()
    button.isAccessibilityElement = true
    button.accessibilityTraits = .button
    button.accessibilityIdentifier = "initial"
    view.addSubview(button)
}

SDK初始化时设置为:

button.accessibilityIdentifier = "databaseUpdated"

这是我在视图调试器中检查按钮时看到的内容:

仍然测试没有找到它。

更新 2

我可以使用 Accessibility Inspector 找到按钮:

【问题讨论】:

  • 您是否尝试默认显示您的按钮并检查您的测试是否在这种情况下工作?您也可以尝试寻找staticText 而不是按钮。
  • 查看我对这个问题的回答stackoverflow.com/questions/60361289
  • @cesarmarch 是的,我试过了,但没有用。
  • “SDK 初始化时”到底是什么意思?
  • SDK 初始化时意味着,我使用的 SDK 会在每次启动我的应用程序时从 Internet 更新其数据库。

标签: ios swift xctest ui-testing xcuitest


【解决方案1】:

检查您添加按钮的 ViewController 在您运行查询时是否可见。否则,您的查询将失败。

【讨论】:

  • 当应用更新 SDK 数据库时,运行更新代码的视图控制器在屏幕上尚不可见。
  • 我已将 SDK 更新功能移至根 ViewController,因为 SDK 使用的是共享实例,最后它工作并找到了该死的按钮。非常感谢。
猜你喜欢
  • 2016-02-29
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 2023-03-30
  • 2017-02-20
相关资源
最近更新 更多