仅使用子字符串Xcode

时间:2018-03-09 14:49:58

标签: xcode xcode-ui-testing ui-testing uiaccessibility

我的应用程序中有一个用于创建帐户的Web视图(我没有写,也无法更改关联的网页)。

通常情况下,点击任何按钮/链接都很容易,但这里是我的"创建帐户"按钮在其标题中有一个很棒的字体,使记录器崩溃,并且无法以编程方式调用该按钮。

以下是app.webViews.allElementsBoundByIndex中打印的内容:

Element subtree:
 →WebView, 0x1c03823c0, traits: 8589934592, {{0.0, 0.0}, {736.0, 414.0}}
...
Link, 0x1c0384100, traits: 8590065666, {{242.0, 357.0}, {252.0, 44.0}}, label: 'create account '

正如你所看到的,字体真棒变成了我无法通过以下方式检测到:

webViews.staticTexts["create account "].tap()

问题

  1. 如何只使用查询的子字符串来查看staticTexts(这里是webViews.staticTexts ["创建acco"]。例如,tap())?
  2. 有没有更好的方法可以找到并点击此按钮和相关链接?

2 个答案:

答案 0 :(得分:1)

在下标上使用starts(with: Sequence)没有捷径。因此,您应该浏览每个文本字段并检查其标签是否以create account开头:

func testStartsWith() {
    let app = XCUIApplication()
    let staticTexts = app.webViews.staticTexts // or app.webViews.links
    for i in 0..<staticTexts.count {
        let text = staticTexts.element(boundBy: i)
        if text.label.starts(with: "create account") {
            text.tap()
            break
        }
    }
}

注意:由于您使用的是WebView,因此staticTexts元素比links元素多得多。根据您提供的打印输出,您的create account 视图具有链接特征,因此您应该能够使用app.webViews.links来加快匹配速度。

答案 1 :(得分:1)

您可以使用NSPredicate上的XCUIElementQuery方法,使用let predicate = NSPredicate(format: "label CONTAINS 'create account'") let app = XCUIApplication() let createAccountText = app.webViews.links.containing(predicate) createAccountText.tap() 查找包含部分字词/词组的静态文字。

{{1}}