【问题标题】:Finding specific div element just below span with title text in cucumber在黄瓜中查找带有标题文本的跨度下方的特定 div 元素
【发布时间】:2013-07-11 16:53:38
【问题描述】:

我正在使用黄瓜和水豚来测试具有以下大纲的网页。

<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 =&gt; title).path 希望提取标题跨度的子 nbr,使用它来获取 div,例如 find(:xpath, "/div[N]")。但是.path 给了我一个错误,告诉我我的 webdriver 不支持它,我正在使用 selenium webdriver,因为页面包含异步 ajax 调用。

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

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

【问题讨论】:

    标签: css xpath cucumber capybara


    【解决方案1】:

    你想做的:

    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 指定为“Title 2”,而不必执行“Title 2”(即必须指定前导/尾随空格)。
    2. /following-sibling::div[1] 表示从找到的 span 中,找到后面的第一个 div 元素。

    【讨论】:

    • 非常感谢!该解释将确保我也可以为将来的场合重写它。很好的答案。
    猜你喜欢
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2017-08-15
    相关资源
    最近更新 更多