java - 在 Appium 中使用 Xpath 查找元素的父元素

标签 java android xpath automated-tests appium

这个问题很受欢迎,但我找到的答案对我不起作用。

所以,我有以下代码 fragment :

MobileElement room = driver.findElement (By.xpath ("//android.widget.TextView[@text = 'Test Room']"));
//Doing some stuff with the room element
MobileElement roomContainer = room.findElement (By.xpath ("./.."));

我得到了room变量,用它做了一些事情。然后我尝试搜索该元素的父元素,但出现 NoSuchElement 异常。

我尝试了 Xpath 的不同组合,但没有一个有效:

".//..",  "//..",  "/..",  ".."

但是,当我使用整个查询从驱动程序进行搜索时,它会起作用:

driver.findElement (By.xpath ("//android.widget.TextView[@text = 'Test Room']/.."))

但在这种特殊情况下,我需要直接从 room 元素进行搜索。有什么建议吗?

screenshot

最佳答案

尽管您可以根据您的问题使用以下 xpath 找到父节点。

driver.findElement (By.xpath ("//android.widget.TextView[@text = 'Test Room']/.."))

但是您想使用 ./.. 从当前子节点定位父节点,而不是为父节点编写完整的 xpath。

我们可以用相反的方法来实现它,我们可以为父节点编写完整的xpath,并且我们可以在父节点内找到子节点而不是整个页面或DOM。

MobileElement roomContainer = driver.findElement (By.xpath ("//android.widget.TextView[@text = 'Test Room']/.."))

MobileElement room = roomContainer.findElement (By.xpath ("//android.widget.TextView[@text = 'Test Room']"));

OR

MobileElement room = roomContainer.findElement (By.id ("item_rooms_list_tv_room_name]"));

注意:父节点也有用于定位的资源 ID,但我不确定它是否唯一,因为我看不到其他 2 个 viewGroup 节点,因此我使用 xpath 作为父节点。

关于java - 在 Appium 中使用 Xpath 查找元素的父元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59645365/

相关文章:

java - spring boot war 找不到index.html

java - RecyclerView 上的 Android throw Action

java - 将 .getPixelColor 与 Robot 类一起使用

android - VideoView 仅在 Galaxy s4 上不循环播放视频

java - 在循环中使用 XPath 表达式

用于选择最后一个内部标签的 Xpath 表达式

java - 哪些场景可以使用静态java方法?

android - 如何使用新的 MediaSession 类接收 Android 5.x 上的媒体按钮按下?

java - 将 Java ME 移植到 Android(处理文件)

ruby - 在 nokogiri 的两个元素之间抓取文本?