【问题标题】:Xpath for element on Android mobile appAndroid 移动应用程序上元素的 Xpath
【发布时间】:2016-02-27 08:43:49
【问题描述】:

我正在努力编写 Android 移动应用程序中存在的元素的 Xpath -

下面是xml:

<node index="5" text="" resource-id="com.mcdonalds.app:id/grid_item" class="android.widget.RelativeLayout" package="com.mcdonalds.app" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[366,601][714,949]">
                        <node index="0" text="Buy one Big Mac, get one FREE&#13;" resource-id="com.mcdonalds.app:id/name" class="android.widget.TextView" package="com.mcdonalds.app" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[378,841][702,907]" />
                        <node index="1" text="Expires 12/31/15" resource-id="com.mcdonalds.app:id/expiration" class="android.widget.TextView" package="com.mcdonalds.app" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[378,907][702,937]" />
                    </node>

我正在尝试单击具有属性 text="Buy one Big Mac, get one FREE&amp;#13;" 的元素

我尝试过的 xpath 是 -

driver.findElementByXPath("//android.widget.TextView[@text='Buy one Big Mac, get one FREE&#13;']").click();

driver.findElementByXPath("//android.widget.TextView[@text=\"Buy one Big Mac, get one FREE&#13;\"]").click();

这两种方法都不起作用。有没有人遇到过类似的问题?

元素没有其他独特的属性。

【问题讨论】:

  • 我怀疑编码在这里造成了麻烦。您可以尝试使用 XPath starts-with(),如果它在 appium 中受支持://android.widget.TextView[starts-with(@text='Buy one Big Mac, get one FREE')]
  • 谢谢哥们。我试过但我收到错误,因为 org.apache.xpath.functions.FuncStartsWith 只允许 2 个参数:(
  • 啊,错误消息表明 XPath 处理器支持 starts-with() 函数,只有传递的 args 数量是错误的(实际上我给出了一个错误的示例,请查看我的答案以获取可能的解决方案)

标签: android xml xpath webdriver appium


【解决方案1】:

我评论中的 = 应该是逗号 (,) 以使其成为有效的 XPath 表达式,如下所示:

//android.widget.TextView[starts-with(@text, 'Buy one Big Mac, get one FREE')]

或者,如果您使用的 XPath 处理器将 &amp;#13; 视为空白,那么您可以先使用 normalize-space() 来清理它:

//android.widget.TextView[normalize-space(@text) = 'Buy one Big Mac, get one FREE']

【讨论】:

  • //android.widget.TextView[normalize-space(@text) = '买一台巨无霸,送一台'] - 这很有效:)
  • @AnujShrivastav 太棒了!然后不要忘记接受答案:stackoverflow.com/help/someone-answers
【解决方案2】:

为什么需要 xpath!!只需使用名称并单击它。像这样:

driver.findElementByName("Buy one Big Mac, get one FREE&#13").click();

【讨论】:

  • 感谢 Gaurav;当元素文本像“买一个巨无霸,免费获得一个”时它确实有效,但是当文本是“买一个巨无霸,获得一个免费 ”时,它不会导致特殊字符串“ ”问题基本上是 xml 中新行的代码
【解决方案3】:

由于元素具有明确的资源 ID,因此使用它.. 它更可靠

driver.findElementBy(By.id("com.mcdonalds.app:id/name"))

然后你得到文本并验证是否需要。

【讨论】:

  • 感谢 Shamik 我有大约 4-5 个具有相同资源 ID 的对象。对象中的文本是唯一的唯一属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 2022-08-19
  • 2014-11-14
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
相关资源
最近更新 更多