Watir 返回不正确 child table

Watir returning incorrect child table

我有两个具有相同属性 (random-attribute) 的 table,这是识别它们的最独特方式。区分它们的唯一方法是根据它们所属的 parent 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>

我正在尝试获取属于 <div class="body"> 的 table main-desc 的内容,但下面的代码不断向我返回 table 的内容 <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") 它 returns 正确 table 的内容但是当我将它链接为 browser.div(class: "body").table(xpath: '//table[@random-attribute="main-desc"]') 它 returns 来自 browser.div(class: "header")

的 table

问题是,如果你用//那么直接在html里搜索相对路径,在div()下不搜索,要在div()下搜索div,你必须在 // 前面使用 .,这意味着你必须使用 .//

所以请编写以下适合您的代码

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

记住包含 XPath 的初始点是 Watir 试图避免使用 XPath 的原因之一。要避免 XPath,您可以这样做:

browser.div(class: "body").table(random_attribute: "main-desc")