2013-12-12 59 views
1

我想做一些我認爲應該很簡單但不能解決的問題。 使用黃瓜和水豚用水豚遍歷樹

在表中我想單擊同一行中的一個按鈕,但不同的單元格。

即我想要找的按鈕「更改角色」是同一行的名稱「鮑勃·珀金斯」

click_button「更改角色」,在中

我要像做

within find("td", text:"Bob Perkins").parent #where this would be the "tr" row 
click_link_or_button("Change Role") 

但是,這給了我一個關於「改變角色」的模糊匹配。當然,頁面上還有更多,但其中只有一個在它應該在的父節點...

+0

的可能的複製[如何獲得水豚父節點?](http://stackoverflow.com/questions/4861863/how-to-get-parent-node-in-capybara) – gtd

回答

1

在與水豚玩了一下後,看起來好像父方法返回了整個html文件

e = find "table > thead" 
=> #<Capybara::Element tag="thead"> 
e.parent 
=> #<Capybara::Document> 

的水豚的默認選擇類型爲CSS和不支持的家長選擇 這可能是值得看的XPath如使用XPath可以執行包含

e = find :xpath, "//table[thead]" 
=> #<Capybara::Element tag="table"> 

e = find :xpath, "//table[thead]", text: "TOTAL" 
=> #<Capybara::Element tag="table"> 

所以找在你的代碼中你可以嘗試這樣的:

e = find :xpath, "//tr[td[contains(text(),'Bob Perkins')]]" 
=> #<Capybara::Element tag="tr"> 

OR

e = find :xpath, "//tr[td]", text: 'Bob Perkins' 
=> #<Capybara::Element tag="tr"> 

所以,你應該得到這樣的事情

within find(:xpath, "//tr[td[contains(text(),'Bob Perkins')]]") do 
    click_link_or_button("Change Role") 
end 

好運。

-1

你幾乎接近答案。

更正一個是:

within(find("td", text:"Bob Perkins").parent){ click_link_or_button("Change Role") } 
1

我不知道有多少人能講流利的XPath,但如果你發現它令人費解,因爲我做的,你可以發現鏈利用只在必要的XPath 。因此,例如:

find("td", text:"Bob Perkins").find(:xpath, '..') # Gives you the TR