使用 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)