我正在使用黄瓜和水豚来测试一个网页,其中包含以下大纲。
<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元素,但没有找到任何帮助。
请帮忙!在您告诉我之前,我不能以任何方式更改网页。
答案 0 :(得分:3)
你想这样做:
title = "Title 2"
within( find(:xpath, "//span[normalize-space(text())='#{title}']/following-sibling::div[1]") ) do
click_link 'publish'
end
xpath的解释:
//span[normalize-space(text())='#{title}']
查找带标题的范围。请注意,normalize-space(text())
用于通过删除多余空格来更轻松地处理空间。这允许将title
指定为“标题2”而不必执行“标题2”(即必须指定前导/尾随空格)。/following-sibling::div[1]
表示从找到的范围中,找到后面的第一个div元素。