Android移动应用上的元素Xpath

时间:2015-11-24 18:55:03

标签: android xml xpath webdriver appium

我很难写出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&#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();

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

元素没有其他独特属性。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我的评论中的public static void main (String[] args) { Scanner input = new Scanner(System.in); System.out.println("Enter an odd integer:"); int n = input.nextInt(); int[][] magic = new int[n][n]; // Place 1 in the center of the first row ( row 0) int row = 0; int col = (n-1)/2; magic[row][col] = 1; for(int i=2; i <=n*n; i++) { // Move up and right to a new position col = col + 1; row = row - 1; // row is off the array if (row == -1) row = n - 1; // col is off the array if (col == n) col = 0; // if the place is taken, place the new number under the previous number if( magic[row][col] !=0 ) { row = row + 1; if (row == n) row = 0; } magic[row][col]=i; } for(int x = 0; x < n; x++) { for(int y=0; y < n; y++) System.out.print("|"+magic[x][y] +"|\t"); System.out.println(); } } 应该是逗号(=),以使其成为有效的XPath表达式,如下所示:

,

或者如果您使用的XPath处理器将//android.widget.TextView[starts-with(@text, 'Buy one Big Mac, get one FREE')] 视为空格,则可以先使用&#13;进行清理:

normalize-space()

答案 2 :(得分:-1)

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

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

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