dropdowns ruby select selenium-webdriver

ruby - dropdowns - selenium select option c#



¿Cómo configuro una opción como seleccionada usando el cliente Selenium WebDriver(selenio 2.0) en ruby? (10)

Código Ruby con Ejemplo:

require "selenium-webdriver" driver = Selenium::WebDriver.for :ie driver.navigate.to "http://google.com" a=driver.find_element(:link,''Advanced search'') a.click a=driver.find_element(:name,''num'') options=a.find_elements(:tag_name=>"option") options.each do |g| if g.text == "20 results" g.click break end end

Estoy tratando de familiarizarme con el nuevo ruby ​​selenium-webdriver, ya que parece ser más intuitivo que la versión anterior de selenio y el controlador de ruby ​​que lo acompaña. Además, tuve problemas para conseguir que el viejo selenio funcionara con ruby ​​1.9.1 en windows, así que pensé que buscaría una alternativa. Hasta ahora he hecho esto con mi script:

require "selenium-webdriver" driver = Selenium::WebDriver.for :firefox driver.get "https://example.com" element = driver.find_element(:name, ''username'') element.send_keys "mwolfe" element = driver.find_element(:name, ''password'') element.send_keys "mypass" driver.find_element(:id, "sign-in-button").click driver.find_element(:id,"menu-link-my_profile_professional_info").click driver.find_element(:id,"add_education_btn").click country_select = driver.find_element(:name, "address_country")

Básicamente, estoy iniciando sesión en mi sitio y tratando de agregar una entrada de educación a mi perfil de usuario. Tengo una referencia a un cuadro de selección con opciones (en la variable country_select) y ahora quiero seleccionar una opción con un valor determinado No veo cómo hacer esto en el nuevo cliente. Lo único que se me ocurre hacer es recorrer todas las opciones hasta que encuentre la que quiero, y luego ejecutar execute_script: http://selenium.googlecode.com/svn/trunk/docs/api/rb/Selenium/WebDriver/Driver.html#execute_script-class_method método para establecer el selectedIndex.

Hay alguna otra manera de hacer esto? En la API java para selenio 2.0 / webdriver aquí: http://seleniumhq.org/docs/09_webdriver.html hay un ejemplo de cómo hacer esto

Select select = new Select(driver.findElement(By.xpath("//select"))); select.deselectAll(); select.selectByVisibleText("Edam");

No parece que la versión de ruby ​​tenga esta característica, a menos que me falta algo. Cualquier ayuda sería apreciada.


Divulgación completa aquí: no tengo ningún conocimiento práctico de Ruby.

Sin embargo, soy bastante bueno con Selenium, así que creo que puedo ayudar. Creo que lo que estás buscando es el método de select . Si ruby ​​se parece a los otros controladores, puede usar el método de selección para indicar una de las opciones que está seleccionado.

En términos de pseudocódigo / java se vería algo como esto

WebElement select = driver.findElement(By.name("select")); List<WebElement> options = select.findElements(By.tagName("option")); for(WebElement option : options){ if(option.getText().equals("Name you want")) { option.click(); break; } }

El objeto Select que tienes arriba está realmente en un paquete de Soporte especial. Solo existe para Java y .Net en este momento (enero de 2011)


La forma más fácil que encontré fue:

select_elem.find_element (: css, "option [value = ''some_value'']"). click



Para la última versión de Webdriver (RC3) debe usar "click ()" en lugar de setSelected (). También option.getText (). Equals ("Name you want") debería usarse en lugar de option.getText () == "Name you want" en JAVA:

<!-- language: lang-java --> WebElement select = driver.findElement(By.name("select")); List<WebElement> options = select.findElements(By.tagName("option")); for(WebElement option : options){ if(option.getText().equals("Name you want"){ option.click(); break; } }


Puedes usar XPath para evitar el bucle:

String nameYouWant = "Name you want"; WebElement select = driver.findElement(By.id(id)); WebElement option = select.findElement(By.xpath("//option[contains(text(),''" + nameYouWant + "'')]")); option.click();

o

WebElement option = select.findElement(By.xpath("//option[text()=''" + nameYouWant + "'']"));


Tenga en cuenta que ninguno de los anteriores funcionará más. Element#select y Element#toggle han quedado en desuso. Necesitas hacer algo como:

my_select.click my_select.find_elements( :tag_name => "option" ).find do |option| option.text == value end.click


pnewhook lo consiguió, pero me gustaría publicar la versión de ruby ​​aquí para que todos puedan verla:

require "selenium-webdriver" driver = Selenium::WebDriver.for :firefox driver.manage.timeouts.implicit_wait = 10 driver.get "https://example.com" country_select = driver.find_element(:id=> "address_country") options = country_select.find_elements(:tag_name=>"option") options.each do |el| if (el.attributes("value") == "USA") el.click() break end end


#SELECT FROM DROPDOWN IN RUBY USING SELENIUM WEBDRIVER #AUTHOR:AYAN DATE:14 June 2012 require "rubygems" require "selenium-webdriver" begin @driver = Selenium::WebDriver.for :firefox @base_url = "http://www.yoururl.com" @driver.manage.timeouts.implicit_wait = 30 @driver.get "http://www.yoursite.com" #select Urugway as Country Selenium::WebDriver::Support::Select.new(@driver.find_element(:id, "country")).select_by(:text, "Uruguay") rescue Exception => e puts e @driver.quit end


require "selenium-webdriver" webdriver = Selenium::WebDriver.for :firefox driver.navigate.to url dropdown = webdriver.find_element(:id,dropdownid) return nil if dropdown.nil? selected = dropdown.find_elements(:tag_name,"option").detect { |option| option.attribute(''text'').eql? value} if selected.nil? then puts "Can''t find value in dropdown list" else selected.click end

En mi caso, esta es solo una muestra de trabajo.