Android 移动应用上元素的 Xpath

Xpath for element on Android mobile app

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

下面是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&#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!!只需使用名称并单击它。像这样:

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

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

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

然后你得到文本并在需要时进行验证。

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

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

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

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