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

Posted

技术标签:

【中文标题】XCTest - 如何在导航栏标题中查询子字符串【英文标题】:XCTest - How to query for substring in navbar title 【发布时间】:2016-10-12 06:20:16 【问题描述】:

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

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

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

但是,这有两个问题:

如果文本不在导航栏中,它仍然会匹配 它进行完全匹配,而我希望能够匹配诸如“Rent”之类的子字符串

如何做到这一点?

【问题讨论】:

【参考方案1】:

为了匹配子串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 打印选项找出它。

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

您可以尝试使用:

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

【讨论】:

【参考方案2】:

试试这些。

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

  Eg:`XCUIApplication().navigationBars["Rent Properties"].staticTexts["Rent Properties"]`
    使用elementMatchingPredicateexpectationForPredicate 来匹配元素。

有用链接:http://masilotti.com/ui-testing-cheat-sheet/

【讨论】:

以上是关于XCTest - 如何在导航栏标题中查询子字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何更改python字符串子字符串信息

XCTest - 等待谓词失败

如何在Java中将字符串子串到第二个点(。)?

使用 Python 的字符串子序列内核和 SVM

数组篇在python中如何查找最长字符串子串

PB中取字符串子串的函数是啥