在Xcode UI测试中,如何测试staticTexts是否包含字符串? 在调试器中,我可以运行类似下面这样的代码来打印出staticTexts的所有内容:但是如何测试字符串是否存在于所有内容中的任何地方呢? 我可以像app.staticTexts["the content of the staticText"].exists?一样检查每个静态文本是否存在,但是我必须使用该静态文本的确切内容。我怎么能只使用可能只是该内容的一部分的字符串呢?
let searchText = "the content of the staticText"
let predicate = NSPredicate(format: "label CONTAINS[c] %@", searchText)
let elementQuery = app.staticTexts.containing(predicate)
if elementQuery.count > 0 {
// the element exists
}
// Find the label
let myLabel = app.staticTexts["myLabel"]
// Check the string displayed on the label is correct
XCTAssertEqual("Expected string", myLabel.label)
// Find the label
let yourLabel = app.staticTexts["AccessibilityIdentifierOfYourLabel"].firstMatch
// assert that contains value
yourLabel.assertContains(text: "a part of content of the staticText")
// Encapsulate your code
func yourElement() -> XCUIElement {
let string = "The European languages are members of the same family."
let predicate = NSPredicate(format: "label CONTAINS[c] '\(string)'")
return app.staticTexts.matching(predicate).firstMatch
}
// To use it
XCTAssert(yourPage.yourElement().waitForExistence(timeout: 20))
5条答案
按热度按时间vlju58qv1#
可以使用
NSPredicate
过滤元素。使用
CONTAINS[c]
可以指定搜索不区分大小写。查看Apple predicate 编程指南
chy5wohz2#
首先,你需要为你想要访问的静态文本对象设置一个可访问性标识符,这样你就可以不用搜索它所显示的字符串就可以找到它。
然后,您可以通过在XCUIElement上调用
.label
来编写测试,以获取所显示字符串的内容,从而Assert所显示的字符串是否是您想要的字符串:要检查它是否包含某个字符串,请使用
range(of:)
,如果找不到您给予的字符串,它将返回nil
。ifmq2ha23#
我在构建XCTest时遇到了这个问题,我需要验证文本块中的动态字符串。我构建了这两个函数来解决我的问题:
我知道这个帖子很老了,但我希望这能帮助到一些人。
qybjjes14#
您可以创建一个扩展来简单地在
XCUIElement
上使用它。ergxz8rk5#