使用 xpath 或 css 选择器解析混合移动应用程序中的所有元素

Posted

技术标签:

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

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

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

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

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

谢谢

【问题讨论】:

【参考方案1】:

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

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

iOS 自动化定位器

CSS 选择器

Appium 中不存在 CSS 选择器。

类名

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

XPath

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

辅助功能 ID

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

UI自动化

您应该使用 Apple 的 UIAutomation、2 框架,因为它是最快的 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 的限制

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

测试定位器策略

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

【讨论】:

哇,真的很有帮助。你的回答很棒。我将在 UIAutomation 中进行挖掘,以开始自动化测试。但有一点需要提一下,自动化测试不仅适用于 IOS,也适用于 android....所以我不确定是否需要为应用程序编写两个不同的解析。 除了接受答案外,请务必给我点赞:P 如果您想要一些关于如何处理 Android + iOS 差异定位器的建议,也可以给我发电子邮件。我对我解决它的方式感到非常满意。 jess@myusername.com

以上是关于使用 xpath 或 css 选择器解析混合移动应用程序中的所有元素的主要内容,如果未能解决你的问题,请参考以下文章

第四部分 解析库的使用(XPathBeautiful SoupPyQuery)

如何在 Chrome 开发者工具中使用 XPath 或 CSS 选择器搜索 DOM 元素?

css 或 xpath 选择器:具有特定值的任何属性的元素

Jsoup css 选择器代码(包括 xpath 代码)

将 CSS 选择器转换为 XPATH

CSS / XPATH 选择器查询