是否可以在XCUIElementQuery中使用正则表达式通过标签匹配UI元素?

时间:2018-07-16 10:17:21

标签: ios swift xcode-ui-testing

我目前正在学习如何在XCode中创建UI测试。

我使用XCUIElementQuery定位并关闭警报

let dismissSavedPasswordButton = app.alerts["Select a Saved Password to Use With “My App”"].buttons["Not Now"]

但是对于较旧的设备(例如运行iOS 9的设备),此代码应如下所示

let dismissSavedPasswordButton = app.alerts["Select a Saved Safari Password to Use With “My App”"].buttons["Not Now"]

是否可以重写此代码以使其通用?

3 个答案:

答案 0 :(得分:1)

扩展XCUIElementQuery类是可能的。我在代码中做了类似的事情:

extension XCUIElementQuery {

    func softMatching(substring: String) -> [XCUIElement] {

        return self.allElementsBoundByIndex.filter { $0.label.contains(substring) }
    }
}

之后,您可以匹配以下元素:

 let dismissSavedPasswordButton = app.alerts.softMatching(substring: "Password").first!.buttons["Not Now"]

答案 1 :(得分:0)

不是正则表达式,但应该可以工作:

app.alerts.element(boundBy: 0)

由于屏幕上应该只有一个警报,所以只需按位置查询它即可。

答案 2 :(得分:0)

除非您在屏幕上有多个“ not now”按钮,否则您只能使用

app.buttons["Not Now"]

您无需指定其他任何内容。