这个问题很受欢迎,但我找到的答案对我不起作用。
所以,我有以下代码 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
元素进行搜索。有什么建议吗?
最佳答案
尽管您可以根据您的问题使用以下 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/