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

时间:2014-09-19 20:57:33

标签: css xpath css-selectors appium

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

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

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

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

由于

1 个答案:

答案 0 :(得分:5)

以下是我对Locators的细分以及我喜欢如何/为何使用iOS自动化。所有这些都是基于我使用Native iOS应用程序的经验。

巨型免责声明: 我对科尔多瓦一无所知。我听说如果有不是原生的类名,UIAutomation就会存在问题。如果是这种情况,我建议坚持使用辅助功能ID和类名定位器策略。

iOS自动化的定位器

CSS选择器

Appium中不存在CSS选择器。

班级名称

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

的XPath

你不想使用XPath,因为它在iOS上很慢而且很有趣。 (它有时会返回一个完全不正确的元素)。它有时会导致仪器无故失败。强烈建议远离XPath。

辅助功能ID

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

UIAutomation

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

UIAutomation框架允许您使用类和层次结构来指定所需的元素。使用Appium时,请使用webdriver上的find_elements_by_ios_uiautomation功能。

使用示例 here

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

查找UIATableview“Cart”的所有UIACell

**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定位器。
  2. 测试定位器策略

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

    Testing Locators with Appium.app Inspector