在 UI 中查找元素 仅使用子字符串 Xcode 进行测试
Finding an element in UI Test with only substring Xcode
我的应用程序中有一个用于创建帐户的网络视图(我没有编写也无法更改关联的网页)。
通常,点击任何 button/link 都很容易,但这里我的 "Create Account" 按钮的字符串在其标题中有一个很棒的字体,使记录器崩溃并且无法以编程方式调用按钮.
这是它在 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 '
如您所见,字体 awesome 变成了
,我无法用类似的东西检测到它:
webViews.staticTexts["create account "].tap()
问题
- 如何仅使用查询的子字符串查看 staticTexts(例如,这里是 webViews.staticTexts["create acco"].tap())?
- 是否有更好的方法来查找并单击此按钮和关联的 link?
在下标上使用 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
视图具有 link 特征,因此您应该能够使用 app.webViews.links
进行更快的匹配。
您可以使用 NSPredicate
查找包含部分 word/phrase 的静态文本,使用 XCUIElementQuery
上的 containing(_:)
方法。
let predicate = NSPredicate(format: "label CONTAINS 'create account'")
let app = XCUIApplication()
let createAccountText = app.webViews.links.containing(predicate)
createAccountText.tap()
我的应用程序中有一个用于创建帐户的网络视图(我没有编写也无法更改关联的网页)。
通常,点击任何 button/link 都很容易,但这里我的 "Create Account" 按钮的字符串在其标题中有一个很棒的字体,使记录器崩溃并且无法以编程方式调用按钮.
这是它在 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 '
如您所见,字体 awesome 变成了
,我无法用类似的东西检测到它:
webViews.staticTexts["create account "].tap()
问题
- 如何仅使用查询的子字符串查看 staticTexts(例如,这里是 webViews.staticTexts["create acco"].tap())?
- 是否有更好的方法来查找并单击此按钮和关联的 link?
在下标上使用 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
视图具有 link 特征,因此您应该能够使用 app.webViews.links
进行更快的匹配。
您可以使用 NSPredicate
查找包含部分 word/phrase 的静态文本,使用 XCUIElementQuery
上的 containing(_:)
方法。
let predicate = NSPredicate(format: "label CONTAINS 'create account'")
let app = XCUIApplication()
let createAccountText = app.webViews.links.containing(predicate)
createAccountText.tap()