【问题标题】:Appium: How to use ios predicate strategy for XCUIElementAppium:如何为 XCUIElement 使用 ios 谓词策略
【发布时间】:2017-02-01 08:46:48
【问题描述】:

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

我想查找不使用 xpath 的元素。 在 appium 1.5.3 中可以使用 Ios 自动化(在 appium java-client 中有 MobileBy.ByIosUIAutomation),但现在 UI 自动化被 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("label == 'Olivia' ")

xpath/UIATableView[2]/UIATableCell[@label = 'Olivia'][1]

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

【问题讨论】:

    标签: java ios xpath appium xctest


    【解决方案1】:

    首先在 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()
    

    希望这会有所帮助并告诉我。

    【讨论】:

    • 酷,非常感谢。真的行!!我仍然不知道如何编写更复杂的定位器,例如使用索引。现在我试图找到一些 ns 谓词规则。也许你知道,我在哪里可以找到?
    • 这就是元素在 java 中的初始化方式:new MobileBy.ByIosNsPredicate("label CONTAINS 'Olivia'")
    猜你喜欢
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 2011-04-28
    • 2013-08-11
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多