Найти родителя элемента с помощью Xpath в Appium - PullRequest
0 голосов
/ 08 января 2020

Этот вопрос довольно популярен, но ответы, которые я нашел, не работают для меня.

Итак, у меня есть следующий фрагмент кода:

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

Ответы [ 2 ]

1 голос
/ 08 января 2020

Хотя вы можете найти родительский узел с указанным ниже 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]"));

Примечание: у родительского узла также есть идентификатор ресурса для locate, но я не уверен, что он уникален, так как я не вижу других 2 viewGroup узлов, поэтому я использовал xpath для родительского узла.

1 голос
/ 08 января 2020

Попробуйте использовать следующий Xpath:

MobileElement roomContainer = room.findElement(By.xpath("./parent::android.view.ViewGroup"));

...