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")
我有两个具有相同属性 (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")
问题是,如果你用//
那么直接在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")