Rspec:如何期望表中的href链接

Rspec:如何期望表中的href链接,rspec,capybara,Rspec,Capybara,我需要看到href“edit_data_source_group_path(data_source_group_1.id)”,它在表中,我尝试了上面的代码 我确信我没有在contains下传递正确的表达式 然后去下面的错误 Selenium::WebDriver::错误::InvalidSelectorError: 给定的xpath表达式“//table//tbody//tr//td[4][contains(href(),edit_data\u source\u group\u path(dat

我需要看到href“edit_data_source_group_path(data_source_group_1.id)”,它在表中,我尝试了上面的代码

我确信我没有在contains下传递正确的表达式 然后去下面的错误 Selenium::WebDriver::错误::InvalidSelectorError: 给定的xpath表达式“//table//tbody//tr//td[4][contains(href(),edit_data\u source\u group\u path(data\u source\u group\u 1.id))”无效:语法错误:该表达式不是合法表达式

我还附上了一张我需要解决的表格快照
有人能帮助我如何期望表中正确的href吗?首先,您应该停止在一个XPath中执行所有操作。它使事情变得非常脆弱,难以阅读,只是一种痛苦。假设页面上只有一个表,您可以这样做

      expect(page). to have_xpath("//table//tbody//tr[1]//td[4][contains(href(), edit_data_source_group_path(data_source_group_1.id))]")
或者使用CSS而不是XPath

cell = page.find(:xpath, './/tbody/tr[1]/td[4]')
expect(cell).to have_link(href: edit_data_source_group_path(data_source_group_1.id))
如果页面上有多个表,则可以将作用域设置为正确的表,也可以使用筛选器块执行此操作

cell = page.find('tbody > tr:first-child > td:nth-child(4)')
expect(cell).to have_link(href: edit_data_source_group_path(data_source_group_1.id))
如果页面上只有一个指向该特定位置的链接,您也可以使用类似于

expect(page).to have_xpath('.//tbody/tr[1]/td[4]') do |cell|
  cell.has_link?(href: edit_data_source_group_path(data_source_group_1.id))
end

注意-所有xpath都以
//
开头-这很重要--而且还有一个理由除非绝对必要否则不要使用xpath。

如果xpath中有错误,不应该使用href(),只使用href,尝试类似的方法: 期望(第页)。要使用xpath(//table//tbody//tr[1]//td[4][contains(href,edit_data\u source\u group\u path(data\u source\u group\u 1.id)))

link = page.find_link(href: edit_data_source_group_path(data_source_group_1.id))
expect(link).to match_css('td:nth-child(4) a')