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

adi*_*ggo 3 css xpath css-selectors appium

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

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

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

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

谢谢

Jes*_*ess 5

下面是我对Locators的细分以及我喜欢如何/为何使用iOS Automation.所有这些都是基于我在Native iOS应用程序中的工作而体验的.

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

iOS自动化的定位器

CSS选择器

Appium中不存在CSS选择器.

班级名称

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

XPath的

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

辅助功能ID

当UIAutomation无法找到元素时,您应该使用它.它比XPath快,但是当UIAutomation不能让你处于某个元素时(.actionSheets()我认为它已经坏了.我在操作表启动时使用它,我需要.click()一个按钮)

UIAutomation

您应该使用Apple的UIAutomation,2框架,因为它是iOS中最快的原生解决方案.

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

这里使用示例

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

查找UIATableview"购物车"的所有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>
Run Code Online (Sandbox Code Playgroud)

现在好了,找到数组中的那些单元格:

value = '.tableviews()["Cart"].cells()'
cells = driver.find_elements_by_ios_uiautomation(value)
Run Code Online (Sandbox Code Playgroud)

额外阅读: 超越谓词的指南以及为什么它们很棒

UIAutomation的限制

  1. 如果您的元素没有可见名称.(开发人员喜欢在"Hint Overlays"等后面放置隐形按钮.)
    • 建议的解决方案:添加辅助功能ID,使用辅助功能ID定位器.

测试定位策略

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

使用Appium.app Inspector测试定位器