XCUITest-无法找到匹配的元素

时间:2019-11-18 04:11:52

标签: swift xcode xcode-ui-testing xctestcase

在我的一个视图控制器中,我有如下代码:

class ViewController: UIViewController {
    @IBOutlet weak var _tableView: UITableView!

    private lazy var searchBar: UISearchBar = {
        let searchBar:UISearchBar = UISearchBar()
        searchBar.isAccessibilityElement = true
        searchBar.accessibilityLabel = "SearchField"
        searchBar.placeholder = "Search..."
        searchBar.sizeToFit()
        searchBar.isTranslucent = false
        searchBar.autocapitalizationType = .none
        searchBar.returnKeyType = .done
        searchBar.delegate = self

        return searchBar
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        isAccessibilityElement = true
        accessibilityLabel = "ViewController"

        _tableView.isAccessibilityElement = true
        _tableView.accessibilityLabel = "ItemList"
        _tableView.tableHeaderView = searchBar
    }
}

现在,每当我尝试记录UI测试并选择 searchBar 时,都会出现以下错误:

  

时间戳事件匹配错误:找不到匹配的元素

我尝试调试以获取 searchBar 和以下代码,但是它与任何元素都不匹配,并且断言失败。

    let searchField = app.tables["ItemList"].otherElements.element(boundBy: 0).otherElements["SearchField"]
    XCTAssertTrue(searchField.exists)

您能告诉我我做错了什么吗?如何访问和测试 searchBar ? 预先感谢。

2 个答案:

答案 0 :(得分:1)

  1. 内置记录器不好,您应该自己编写测试代码。

  2. 使用print(app.debugDescription)

  3. 在VoiceOver层次结构中查找元素
  4. 您的XCUIElementQuery有点长。尝试像app.otherElements["SearchField"]

  5. 那样缩短

答案 1 :(得分:1)

您可以从底部到顶部使用Debug View Hierarchy或XCode开放式开发工具Accesibility Inspector查找未启用辅助功能的视图。