在黄瓜标题文本的下方查找特定div元素

时间:2013-07-11 06:25:24

标签: css xpath cucumber capybara

我正在使用黄瓜和水豚来测试一个网页,其中包含以下大纲。

<span> Title 1 </span>
<span> Some text </span>
<div> link Y </div>
<span> Title 2 </span>
<span> Some text </span>
<div> link Y </div>
<span> Title 3 </span>
<span> Some text </span>
<div> link Y </div>

我想点击标题2下面的链接。但由于所有链接都具有相同的名称和相同的css,除非是异步ajax调用,我能以某种方式在查找器中使用它吗? 我还想设计一个辅助方法,它接受Title并找到它的链接,这样一个精确的xpath就行了。

到目前为止我尝试过:

within(find("span", :text => title)) do
  within(find(:xpath, "../div")) do
    click_link 'publish'
  end
end

你可以告诉xpaths不是我的强项。

我也尝试过本机获取capybara:node:element的路径使用:find("span", :text => title).path希望使用它来提取标题范围的子nbr以获得div {{1} })。但是find(:xpath, "/div[N]"给了我一个错误,告诉我它不受我的webdriver的支持,我使用的是selenium webdriver,因为该页面包含异步的ajax调用。

我也试过查看.path selenium webdriver元素,但没有找到任何帮助。

请帮忙!在您告诉我之前,我不能以任何方式更改网页。

1 个答案:

答案 0 :(得分:3)

你想这样做:

title = "Title 2"
within( find(:xpath, "//span[normalize-space(text())='#{title}']/following-sibling::div[1]") ) do
    click_link 'publish'
end

xpath的解释:

  1. //span[normalize-space(text())='#{title}']查找带标题的范围。请注意,normalize-space(text())用于通过删除多余空格来更轻松地处理空间。这允许将title指定为“标题2”而不必执行“标题2”(即必须指定前导/尾随空格)。
  2. /following-sibling::div[1]表示从找到的范围中,找到后面的第一个div元素。