我正在使用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] ?
答案 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()
希望这会有所帮助,让我知道。