Appium:如何为XCUIElement使用ios谓词策略

时间:2016-09-23 13:10:21

标签: java ios xpath appium xctest

我正在使用appium 1.6.0-beta1,Xcode 8,iPhone iOS 10模拟器和java编写移动自动测试。

我想找到不使用xpath的元素。 在appium 1.5.3中可以使用Ios Automation(在appium java-client中有MobileBy.ByIosUIAutomation),但现在UI Automation被XCUITest取代。

我发现,ios谓词可用于查找XCUI元素(appium java-client 5.0.0中的MobileBy.ByIosNsPredicate)。

我的问题是如何使用ios谓词找到元素?

我在这里找到了UIAutomation的规则:http://appium.readthedocs.io/en/stable/en/writing-running-appium/ios_predicate/#appium-predicate-helpers。 例如,这里是xpath的ios谓词等价物:

ios谓词 tableViews()[1] .cells()。firstWithPredicate(&#34; label ==&#39; Olivia&#39;&#34;)< / em>的

xpath / UIATableView [2] / UIATableCell [@label =&#39; Olivia&#39;] [1]

我应该为这样的xpath使用什么ios谓词: // XCUIElementTypeCell / XCUIElementTypeStaticText [3]

1 个答案:

答案 0 :(得分:4)

首先在xcode ui测试中,你可以像下面那样使用NSPredicate:

NSPredicate(format: "label CONTAINS 'your label string'")

NSPredicate(format: "label BEGINSWITH 'your label string'")

NSPredicate(format: "label ENDSWITH 'your label string'")

NSPredicate(format: "label == 'your label string'")

因此,在您的情况下,您的解决方案是

app.cells.matchingPredicate(NSPredicate(format: "label CONTAINS 'Olivia'"))

这将返回xcelementquery,这意味着您将获得一个或多个元素。 从那里,您可以选择所需的元素,如:

let elem = app.cells.matchingPredicate(NSPredicate(format: "label CONTAINS 'Olivia'")).elementBoundByIndex(0) //it may be 0 or 1 or 2
//you can know this using p print in debug mode.

现在使用这个元素点击或从这个元素中获取任何东西。

elem.tap()

希望这会有所帮助,让我知道。