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

Array, да, конечно. Я забыл, что selected_options возвращает массив выбранных параметров :) Спасибо. –

+0

Этот ответ, возможно, сработал для OP, но я бы * сильно * предложил НЕ использовать этот ответ из-за причин, о которых указывает Cheezy ниже. –

2

Метод selected_options возвращает Array из Option объектов. Вызов (&:text) такое же, как призвание:

selected_options.collect { |opt| opt.text } 

Это возвращает новый Array, который содержит текст. Таким образом, @sltedStudy - это массив. Когда вы сравниваете его с текстом в своем обращении к cell_element, он просто возвращает String. В вашем совпадении вы сравниваете Array с String. Вы можете изменить использование совпадения include или просто посмотреть на первый элемент массива как Surya.

В другом примечании, я думаю, что подход, который вы принимаете, фактически наносит ущерб всей цели использования объектов страницы. Кажется, вы показываете детали реализации за пределами объекта страницы в представленных вами вызовах. Я бы настоятельно предложил инкапсулировать знание типа элементов, а также путь внутри страниц.

+0

О, привет Джефф :) Спасибо за ваше объяснение. Я просто забыл, что selected_options возвращает массив. Интересно, могу ли я присвоить только одно значение выбранной опции в случае, если разрешено только один выбор? Потому что в моем случае мне не нужен весь массив вариантов выбора? –