【问题标题】:XCUITest: Failed to find Matching ElementXCUITest:找不到匹配元素
【发布时间】:2018-11-27 20:19:11
【问题描述】:

我在 ViewController 上有一个关闭按钮,该按钮显示为 ChildViewController。我打开了此按钮的辅助功能,辅助功能标识符为closeButton。这个按钮没有任何文字,只有一张图片。

我正在尝试测试此视图的呈现和关闭,但遇到了一个问题,XCUITest 找不到该元素。我的测试代码是:

app.buttons["PresentChild"].tap()
XCTAssertTrue(app.otherElements["ChildViewController"].exists)
XCTAssertTrue(app.buttons["closeButton"].exists)

第一个断言通过,但第二个断言失败。

我尝试执行“记录 UI 测试”以选择按钮以使其自动生成,但随后我收到一条错误消息,提示 Failed to find Matching Element。我尝试擦除模拟器上的所有内容并删除所有派生数据,但这也不起作用。

有人知道 Xcode 中这个明显错误的解决方法吗?我无法通过录制访问元素,我无法通过辅助功能访问元素,我对如何访问此按钮一无所知。

【问题讨论】:

  • Xcode 会在每次测试失败时截取屏幕截图。转到 Test Navigator (Cmd + 6),右键单击失败的测试并选择 Jump to Report。报告上的条目应该包含一个屏幕截图,帮助您了解应用程序在运行第二个断言时的状态
  • @CodeDifferent 是的,这并没有多大帮助。刚刚确认关闭按钮实际上是在 XCTAssertTrue 时显示的。
  • 用户可以选择关闭按钮吗?是否有覆盖整个屏幕的半透明视图?如果没有看到任何关于您的应用的信息,就无法诊断出问题所在。
  • 是的,该按钮是可选择的。不,没有覆盖整个屏幕的视图。如果有帮助,我的视图控制器架构将变为UITabBarController -> UINavigationViewController -> ParentViewController -> ChildViewController 子视图控制器通过以下方式添加到应用程序中:1)通过以下方式添加子视图:UIApplication.shared.keyWindow?.addSubview(childViewController.view),然后 2)通过:childViewController.didMove(toParentViewController: parentViewController) 将子视图移动到父级跨度>

标签: ios swift xcode automated-tests xcuitest


【解决方案1】:

我不知道您的断言的确切问题是什么。但这些步骤可能会对您有所帮助。

  • 在此行设置断点XCTAssertTrue(app.otherElements["ChildViewController"].exists)
  • 现在运行测试用例。当控件到达此行时,在调试器中键入此行po XCUIApplication().buttons.debugDescription 然后点击回车按钮
  • 它将打印当前视图中的所有按钮。现在检查该列表中是否存在“closeButton
  • 如果存在,请检查标识符名称。确保它是"closeButton"(标识符区分大小写,标识符中的空格也很重要)
  • 如果标识符正确,请尝试找出 closeButton 的确切视图层次结构。意思是,不要像 app.buttons["closeButton"].exists 那样检查,而是像 app.navigationBars.otherElements["someName"].buttons["closeButton"].exists 那样尝试

(这看起来很有趣,但是给出元素的确切位置路径是一个很好的做法,它有时会起作用)

注意:如果系统在对其执行操作时无法找到具有正确标识符的元素,则会在 UI 录制上出现此错误“Failed to find Matching Element”。所以我的猜测是,您的 closeButton 没有正确的标识符,或者它没有添加到当前窗口。

干杯!!

【讨论】:

  • 我在那个地方的测试中添加了一个断点,并按照你的建议做了。 XCUITests 只是无法识别嵌套在 ChildViewController 主视图中的任何内容。视图控制器的层次结构是:ViewController Scene --> View Controller --> View --> [Safe Area, TableView, Close Button]。我启用了view 的可访问性并将id 设置为ChildView。当我调试它时,我首先尝试了po XCUIApplication().otherElements["ChildView"],它返回了一些信息。但是,如果我将.buttons.tables 附加到该原始命令,则什么也找不到...
猜你喜欢
  • 1970-01-01
  • 2016-08-04
  • 2016-03-31
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 2023-03-11
  • 1970-01-01
相关资源
最近更新 更多