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"

如何从没有 [ ] 括号的选择列表中获取文本值?

4

3 回答 3

3

selected_options方法返回一个Array对象Option。调用(&:text)与调用相同:

selected_options.collect { |opt| opt.text }

这将返回一个Array包含文本的新的。@sltedStudy数组也是如此。当您将其与调用中的文本进行比较时,cell_element它只是返回一个String. 在您的匹配器中,您将 aArray与 a进行比较String。您可以更改为使用include匹配器,或者您可以简单地将数组的第一个元素视为 Surya。

另一方面,我认为您采用的方法实际上违背了使用页面对象的全部目的。您似乎在您提供的调用中将实现细节暴露在页面对象之外。我强烈建议封装元素类型以及页面内部路径的知识。

于 2014-12-29T23:00:23.693 回答
1

它看起来像这一行:

@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
于 2014-12-29T09:36:45.633 回答
-1

尝试像这样使用:current_month_element.selected_options[0].text

于 2019-10-10T14:59:05.797 回答