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 .