2017-07-10 2 views
-1

Je suis nouveau à Capybara et j'essaie d'écrire un test où l'option par défaut dans une liste déroulante va changer en fonction du lien sur lequel l'utilisateur clique dans la page précédente. par exemple. cliquez sur link1, puis link1 sera l'option par défaut.Capybara comment tester l'option désactivée dans une liste déroulante

J'ai trouvé en ligne quelqu'un a dit de tester l'option désactivée dans une liste déroulante avec ce qui suit, mais je ne peux toujours pas le faire fonctionner.

Then /^"([^"]*)" should be selected for "([^"]*)"(?: within "([^\"]*)")?$/ do |value, field, selector| 
    with_scope(selector) do 
    field_labeled(field).find(:xpath, ".//option[@selected = 'selected'][text() = '#{value}']").should be_present 
    end 
end 

Répondre

1

D'après votre description Je suppose que vous voulez dire l'option selected plutôt que l'option disabled. Pour ce faire dans Capybara serait

expect(page).to have_select('id, name, placeholder or label text of select', selected: 'text of selected option') 

En utilisant cette étape dans votre concombre avec la possibilité de cadrage deviendrait alors

Then /^"([^"]*)" should be selected for "([^"]*)"(?: within "([^\"]*)")?$/ do |value, field, selector| 
    within(selector) do 
    expect(page).to have_select(field, selected: value) 
    end 
end 

que vous appelez quelque chose comme.

Then "California" should be selected for "State" within "#user_profile" 

Si vous avez vraiment envie de vérifier une option désactivée dans une sélection, vous pouvez le faire comme

select = find(:select, 'id, name, placeholder or label text of select') 
expect(select).to have_selector(:option, 'text of disabled option', disabled: true) 
0
  1. Si vous voulez tester si vous avez l'option désactivée.
  2. Recherchez le nombre d'éléments qui désactivent cette zone. Avec la commande "taille".
  3. Si le résultat est 1 ou 0, vous pouvez taper cette commande.

Exemple:

And(/^All segments in this area need to be subject to the product (\d+) see it$/) do 
    area=find_by_id('temelGostergeler') 
    number=area.all("div#urunTab.caption[style='display: none;']").size 

    print "All of  " 

     expect(number).to eq 0 

    if 
    number==1 
    number="No product" 
    else 
    number="There are product" 
    end 
    p number 
end 

Vous pouvez synchroniser avec la commande attendre si vous voulez.