0

我用下一個命令來獲得選擇的選項中選擇列表的文本:如何從選擇列表中沒有[]所選選項的文本括號

@sltedStudy=page.select_list_element(:id => 'cntrStudy', :frame => frame).selected_options(&:text) 

但是當我嘗試對值進行比較:

expect(page.cell_element(:xpath => "//td[.='Lorem Ipsum']/following-sibling::td[1]", :frame => frame).text).to be == @sltedStudy 

返回:

RSpec::Expectations::ExpectationNotMetError: expected: == ["SLC"] 
    got: "SLC" 

如何我可以從選擇列表中沒有括號[]文本的價值?

回答

0

它看起來像這樣一行:

@sltedStudy = page.select_list_element(:id => 'cntrStudy', :frame => frame).selected_options(&:text) 

給出了文本的數組從選定的選項:["SLC"]

試着改變你的RSpec這樣的:

expect(page.cell_element(:xpath => "//td[.='Lorem Ipsum']/following-sibling::td[1]", :frame => frame).text).to be == @sltedStudy.first 

或本:

expect([page.cell_element(:xpath => "//td[.='Lorem Ipsum']/following-sibling::td[1]", :frame => frame).text]).to be == @sltedStudy 
+0

數組,當然是。我忘記了selected_options返回一組選定的選項:)謝謝。 –

+0

此答案可能適用於OP,但由於Cheezy指出的原因,我強烈建議不要使用此答案。 –

2

selected_options方法返回ArrayOption對象。調用(&:text)是一樣的呼喚:

selected_options.collect { |opt| opt.text } 

這將返回一個新Array包含文本。所以@sltedStudy是一個數組。當您將其與cell_element的電話中的文字進行比較時,它僅返回String。在匹配器中,您將ArrayString進行比較。您可以更改爲使用include匹配器,或者您可以簡單地將陣列的第一個元素視爲Surya。

另一方面,我認爲你採取的方法實際上是擊敗了使用頁面對象的全部目的。您似乎在您提供的調用中將頁面對象外的實現細節公開。我強烈建議封裝元素類型的知識以及頁面內部的路徑。

+0

哦,嗨傑夫:)謝謝你的解釋。我只是忘記了selected_options返回一個數組。我想知道,如果只允許一個選擇,我可以只分配一個選定的選項的值嗎?因爲在我的情況下,我不需要所有的選擇選項陣列? –

相關問題