如何使用selenium通过tag_name查找最近的父级

问题描述 投票:0回答:2

我正在使用

selenium-webdriver
处理“表格样式”网站。

表格嵌套很多,并且没有

id
name
属性。

所以我决定在表格中获取标题文本来找到这样的数据位置。

 driver = Selenimum::WebDriver.for :firefox
 element = driver.find_element(:xpath,
   "//font[@color='#FFFFFF' and text()='some probably unique text']")

来自这样的 HTML。

<table><tbody>
...
<table><tbody><tr><td><font color="#FFFFFF">
  some probably unique text
</font></td></tr></table>
...
</tbody></table>

我想从上面代码中获得的

table
元素中获取内部
font
元素。 我知道我可以接受
element.find_element(:xpath, "../../../..")
,但这有点恶心。

我想至少像这样指定一个标签名称

element.find_element(:xpath, "../*/table")

有办法做到这一点吗?

html ruby selenium xpath
2个回答
4
投票

您可以使用 XPath 轴

ancestor

element = driver.find_element(:xpath, ".//font[@color='#FFFFFF' and text()='some probably unique text']/ancestor::table")

或嵌套 XPath:不适用于像您这样的嵌套表情况

element = driver.find_element(:xpath, ".//table[.//font[@color='#FFFFFF' and text()='some probably unique text']]")

0
投票

如果您使用 Capybara,节点有一个方法

ancestor
接受 CSS 选择器(类似于 JavaScript 的
closest
)。 例如:

table = find("font[color=FFFFFF]", text: "some probably unique text").ancestor("table")

within table do
  click_on "stuff"
end
© www.soinside.com 2019 - 2024. All rights reserved.