【问题标题】:use xpath or css selector to parse all the element in a hybrid mobile app使用 xpath 或 css 选择器解析混合移动应用程序中的所有元素
【发布时间】:2014-11-14 12:59:30
【问题描述】:

我目前正在从事移动 UI 自动化测试。我们的应用程序是基于 Cordova 的混合移动应用程序。所以我打算用appium来运行一些自动化测试。

我需要弄清楚的一件事是如何找到页面中的所有元素。

我之前计划使用 xpath 来查找所有元素,因为我们可以通过 appium 检查器检测 xpath。但是,我的同事不同意我的观点,因为他想使用 css 选择器作为在移动应用程序中查找所有元素的关键。但是对于 appium,它不会在检查器中显示 css 选择器。

所以,我只是好奇哪种方法应该更好?

谢谢

【问题讨论】:

    标签: css xpath css-selectors appium


    【解决方案1】:

    以下是我对定位器的细分以及我喜欢如何/为什么将它们用于 iOS 自动化。所有这些都是基于我使用原生 iOS 应用程序的经验。

    巨大的免责声明: 我对科尔多瓦一无所知。我听说如果有非本地的类名,UIAutomation 存在问题。如果是这种情况,我建议坚持使用可访问性 id 和类名定位器策略。

    iOS 自动化定位器

    CSS 选择器

    Appium 中不存在 CSS 选择器。

    类名

    最接近 CSS 选择器的是类名选择器。我并没有真正使用它们,因为 UIAutomation 为我提供了我需要的东西,并允许我检查定位器策略中元素的名称/文本。

    XPath

    您不想使用 XPath,因为它在 iOS 上既慢又不稳定。 (它有时会返回一个完全不正确的元素)。它有时会导致 Instruments 无缘无故地失败。强烈建议远离 XPath。

    辅助功能 ID

    当 UIAutomation 无法找到元素时,您应该使用它。它比 XPath 更快,但在 UIAutomation 不允许您访问某个元素时很有用(我认为.actionSheets() 已损坏。我在操作表启动时使用它,我需要.click() 一个按钮)

    UI自动化

    您应该使用 Apple 的 UIAutomation2 框架,因为它是最快的 iOS 原生解决方案。

    UIAutomation 框架允许您使用类和层次结构来指定您想要的元素。使用 Appium 时,请在 webdriver 上使用 find_elements_by_ios_uiautomation 函数。

    使用示例 here

    但是示例用法并没有告诉您 UIAutomation 的真正强大之处。我遇到的一个常见问题是,当屏幕上有多个 tableview 时,试图找到 tableview 的所有单元格。

    查找 UIATableview“Cart”的所有 UIACells

    **Sample View Hierarchy** 
    
      <application>
        <window>
            <table name="Items">
              <cell name="Foo, not in cart"></cell>
            </table>
            <table name="Cart">
              <cell name="Bar. IM IN YOUR CART"></cell>
            </table>
        </window>
      </application>
    

    现在可以在数组中查找这些单元格:

    value = '.tableviews()["Cart"].cells()'
    cells = driver.find_elements_by_ios_uiautomation(value)
    

    额外阅读: Guide 介绍谓词以及它们为什么很棒

    UIAutomation 的限制

    1. 如果您的元素没有可见的名称。 (开发者喜欢在“Hint Overlays”之类的后面放置隐形按钮。)
      • 建议的解决方案:添加无障碍 id,使用无障碍 id 定位器。

    测试定位器策略

    Inspector 中有一个不错的地方(在 Appium.app GUI 中提供),可以让您尝试任何您想要的定位器策略和值。你应该使用它。它有很大帮助。

    【讨论】:

    • 哇,真的很有帮助。你的回答很棒。我将在 UIAutomation 中进行挖掘,以开始自动化测试。但有一点需要提一下,自动化测试不仅适用于 IOS,也适用于 Android....所以我不确定是否需要为应用程序编写两个不同的解析。
    • 除了接受答案外,请务必给我点赞:P
    • 如果您想要一些关于如何处理 Android + iOS 差异定位器的建议,也可以给我发电子邮件。我对我解决它的方式感到非常满意。 jess@myusername.com
    猜你喜欢
    • 2011-02-06
    • 2014-05-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2015-04-28
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多