strong etiqueta ruby capybara

ruby - etiqueta strong



Carpincho: Seleccione una opciĆ³n por valor, no por texto (8)

Con Poltergeist como controlador, no puedo hacer clic en una opción como la sugerida en algunas de las otras opciones anteriores, sino que puede hacer lo siguiente:

page.find_by_id(''date'').find("option[value=''20120905'']").select_option

Para el HTML

<select id="date"> <option value="20120904">Tue 4 Sep 2012</option> <option value="20120905">Wed 5 Sep 2012</option> <option value="20120906">Thu 6 Sep 2012</option> </select>

Tengo el siguiente código de Capybara Ruby:

select "20120905", :from => "date"

Pero este error con:

cannot select option, no option with text ''20120905'' in select box ''date'' (Capybara::ElementNotFound)

Sin embargo, si lo hago

select "Wed 5 Sep 2012", :from => "date"

Está bien.

¿Es posible seleccionar una opción en Capibara por Value not Text ?

Gracias


En mi caso, tengo algunas opciones con el mismo texto, esa es la razón por la que necesito seleccionar por valor. Combinando algunas respuestas juntas, he encontrado la mejor solución para mí:

def select_by_value(id, value) option_xpath = "//*[@id=''#{id}'']/option[@value=''#{value}'']" find(:xpath, option_xpath).select_option end


Escribí un método de ayuda:

def select_by_value(id, value) option_xpath = "//*[@id=''#{id}'']/option[@value=''#{value}'']" option = find(:xpath, option_xpath).text select(option, :from => id) end

Guardar en un archivo .rb en spec / support /

Ejemplo de uso:

before do select_by_value ''some_field_id'', ''value'' click_button ''Submit'' end


Ese método de ayuda bastante inteligente. Lo cambiaría un poco:

def select_by_value(id, value) option_xpath = "//*[@id=''#{id}'']/option[@value=''#{value}'']" find(:xpath, option_xpath).click

fin

o solo:

find(:xpath, "//select[@id=''date'']/option[@value=''20120904'']").click


Esto funcionará para seleccionar una opción por valor:

find("option[value=''20120905'']").click

Para mantener el alcance del selector, puede envolverlo en un bloque interno como tal:

within ''#date'' do find("option[value=''20120905'']").click end


Haga clic en usar find_field funciona bien:

find_field("date").find("option[value=''20120905'']").click


También puede lograrlo haciendo lo siguiente:

find_by_id(''date'').find("option[value=''20120905'']").click


También puede usar capybara-ui que primero buscará coincidir con el texto y luego coincidirá con el valor.

# define your form widget, in this case in a role class UserRole < Capybara::UI::Role form :my_form do select :my_select, ''my_select'' end end # then just submit your form params via #submit role = UserRole.new role.submit :my_form, my_select: ''20120905''

Vea más sobre los formularios de capibara-ui here .