2016-02-22 5 views
1

Мой HTML являетсяCapybara - как узнать, выбран ли выпадающий элемент?

<select id="auto_policy_autos_attributes_0_ownership" name="auto_policy[autos_attributes][0][ownership]"> 
    <option value="Owned">Owned</option> 
    <option value="Financed">Financed</option> 
    <option value="Leased" selected="selected">Leased</option></select> 

и я могу выбрать до

find('select#auto_policy_autos_attributes_0_ownership option[value="Leased"]') 

правильно, но как я вижу, если он был проверен?

Я попытался

find('select#auto_policy_autos_attributes_0_ownership option[value="Leased" selected="selected"]') 

, но я получаю

Selenium::WebDriver::Error::InvalidSelectorError: invalid selector: 
An invalid or illegal selector was specified 

Я имел надежды на

'select#auto_policy_autos_attributes_0_ownership option[value="Leased"], selected')).to be 

, но я получаю ложный положительный результат, как

'select#auto_policy_autos_attributes_0_ownership option[value="Owned"], selected')).to be 

возвращается правда, даже если я выбрал Выделенная с

select 'Leased', from: 'auto_policy_autos_attributes_0_ownership' 

, который я могу видеть, работать в браузере.

ответ

1

Вы можете использовать be_selected matcher:

expect(@session.find('select#auto_policy_autos_attributes_0_ownership option[value="Leased"]')).to be_selected 
1

Один из вариантов был

expect(has_select?('auto_policy_autos_attributes_0_ownership', selected: 'Leased')).to be true 
+0

но я предпочитаю alecxe, поскольку be_selected более описателен, особенно когда он терпит неудачу (когда он считается!) –

0

Это именно то, что капибары have_select согласовани предназначен для

expect(page).to have_select('auto_policy_autos_attributes_0_ownership', selected: 'Leased') 

, который описывает то, что вы» re check for - конкретный элемент select с специально выбранным параметром и предоставляет fo Хорошее сообщение об ошибке, когда происходит сбой.

Если вы действительно хотите придерживаться предиката согласовани вы могли бы также сделать

expect(find(:option, 'Leased')).to be_selected 

хотя этот вариант может быть в любом выбрать на странице, если вы не использовали внутри блока или области действия находки для конкретного выбора ,

Смежные вопросы