XCTest - 如何在导航栏标题中查询子字符串

时间:2016-10-12 06:20:17

标签: ios swift xcode xcode-ui-testing

我希望能够验证UI测试中导航栏中是否显示子字符串。

例如,如果导航栏标题是“Rent Properties”,那么我可以这样匹配:

XCTAssert(XCUIApplication().staticTexts["Rent Properties"].exists)

然而,这有两个问题:

  • 如果文字不在导航栏中,它仍会匹配
  • 它完全匹配,而我希望能够匹配一个子字符串,如“Rent”

如何做到这一点?

2 个答案:

答案 0 :(得分:6)

对于匹配子字符串Rent,您可以使用以下代码:

XCUIApplication().staticTexts.matchingPredicate(NSPredicate(format: "label CONTAINS 'Rent'")).elementBoundByIndex(0)
//it may contains one or more element with substring Rent.
//you have to find out which element index you want in debug mode using p print() options.

对于第一个选项,元素显示或不显示时肯定存在差异。你必须在调试模式下使用po或p print选项找出它。

例如,可能计数不同或元素不可命中等等......

您可以尝试使用:

let app = XCUIApplication()
XCTAssert(app.staticTexts["Rent Properties"].exists)

or 
let app = XCUIApplication()
app.staticTexts["Rent Properties"].hittable

or
let app = XCUIApplication()
app.staticTexts["Rent Properties"].enabled

or 

app.staticTexts.matchingIdentifier("Rent Properties").count
//take count while showing the text and take the count while not showing the text

答案 1 :(得分:2)

试试这些。

1.获取元素中的静态文本,而不是从appication获取。

  Eg:`XCUIApplication().navigationBars["Rent Properties"].staticTexts["Rent Properties"]`
  1. 使用elementMatchingPredicateexpectationForPredicate来匹配元素。
  2. 有用的链接:http://masilotti.com/ui-testing-cheat-sheet/