Watir возвращает неверный дочерний стол - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть две таблицы с одинаковыми атрибутами (random-attribute), что является наиболее уникальным способом их идентификации. Единственный способ их различить - по родительскому элементу div, к которому они принадлежат (см. Пример ниже).

<div class="header">
    <table random-attribute="left-desc">
    </table>
    <table random-attribute="main-desc">
    </table>
<div>
<div class="body">
    <table random-attribute="left-desc">
    </table>
    <table random-attribute="main-desc">
    </table>
<div>

Я пытаюсь получить содержимое таблицы main-desc, принадлежащей <div class="body">, нокод ниже продолжает возвращать мне содержимое таблицы <div class="header">

browser = Watir::Browser.new
browser.goto(MY_URL_PAGE)
browser.div(class: "body").table(xpath: '//table[@random-attribute="main-desc"]')

Странная часть, если я запускаю browser.div(class: "body"), она возвращает содержимое правильной таблицы, но когда я чередую ее как browser.div(class: "body").table(xpath: '//table[@random-attribute="main-desc"]'), онавозвращает таблицу из browser.div(class: "header")

Ответы [ 2 ]

1 голос
/ 03 ноября 2019

Не забывайте указывать начальную точку XPath - одна из причин, по которой Watir пытается избежать XPath. Чтобы избежать XPath, вы можете сделать:

browser.div(class: "body").table(random_attribute: "main-desc")
1 голос
/ 02 ноября 2019

Проблема в том, что если вы используете //, то он напрямую ищет относительный путь в html, он не ищет под div(), чтобы выполнить поиск в div, вы должны использовать . infrontиз //, что означает, что вы должны использовать .//

Так что напишите следующий код, он будет работать для вас

p b.div(class: "body").table(xpath: './/table[@random-attribute="main-desc"]').parent.html

Выход

"<div class=\"body\">\n    <table random-attribute=\"left-desc\">\n    </table>\n    <table random-attribute=\"main-desc\">\n    </table>\n</div>"

Или выможет напрямую формировать xpath, как показано ниже

p b.element(xpath: "//div[@class='body']/table[@random-attribute='main-desc']").parent.html
...