【问题标题】:Why XCUITest is working too much slow for iOS app?为什么 XCUITest 对 iOS 应用程序运行太慢?
【发布时间】:2019-10-18 06:07:40
【问题描述】:

我想在 iOS 原生应用中获取动态元素的值。我使用XCUITest 来获取元素的路径。路径工作正常,但获取/打印值大约需要 1 分钟。我没有使用任何等待。

我的代码是:

String El1="//XCUIElementTypeApplication[@name='appName']/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeTable/XCUIElementTypeCell[5]/XCUIElementTypeStaticText";

 System.out.println("Value: "+driver.findElementByXPath(El1).getText());

【问题讨论】:

    标签: selenium automation appium xcuitest


    【解决方案1】:

    XCTest 是一个非常快速的框架。 尽管 Xpath 非常常见且灵活,但它并不是查找 iOS 元素的最佳选择。 您应缩短对该元素的查询并使用findElementByIosNsPredicate

    IOSElement settingsCell = driver.findElementByIosNsPredicate("type == 'XCUIElementTypeCell' AND name == 'Settings'");

    您可能会发现这篇文章很有帮助

    http://appium.io/docs/en/writing-running-appium/ios/ios-predicate/

    【讨论】:

      【解决方案2】:

      原因是你的 xpath 字符串很长。这往往会减慢 Appium 的速度,因为它需要遍历您的案例中的长路径。放置绝对 xpath 也是非常脆弱和糟糕的主意。
      有几种获取元素的方法

      类名
      身份证
      名称
      xpath
      可访问性 ID
      ios 谓词字符串
      ios类链



      请参阅元素的检查器(例如 Appium 检查器)。
      如果有可访问的 id ,代码应该是

      WebElement el = driver.findElement(MobileBy.AccessibilityID("foo"));
      




      班级名称
      类名应该是第二个。这特别有效,特别是如果只有 1 个唯一的类名 - 比如表单中只有 1 个按钮

      List<MobileElement> elementsTwo = (List<MobileElement>) driver.findElementsByClassName("XCUIElementTypeButton");
      
      
      




      iOS 特定的定位器策略
      你可以试试 iOSClassChain。那是下一个有效的选择器。示例

      String selector = "**/XCUIElementTypeCell[`name BEGINSWITH "C"`]/XCUIElementTypeButton[10]";<br>
      driver.findElement(MobileBy.iOSClassChain(selector));
      


      或者您可以尝试使用谓词选择器。

      driver.findElementsByIosNsPredicate("isWDVisible == 1");
      




      最后,如果所有这些选项都用完了,你应该使用 xpath 作为最后的手段。避免使用绝对 xpath 并使用相对 xpath。



      绝对 xpath

      String El1="//XCUIElementTypeApplication[@name='appName']/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeTable/XCUIElementTypeCell[5]/XCUIElementTypeStaticText";
      


      相对 xpath

      String El1 = “//XCUIElementTypeTable[name=‘Customer’]/XCUIElementTypeCell[5]/XCUIElementTypeStaticText”
      



      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-11
        • 1970-01-01
        • 2023-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多