¿Cómo se configura como una opción seleccionada utilizando selenio WebDriver (selenio 2.0) cliente en rubí

StackOverflow https://stackoverflow.com/questions/4672658

  •  10-10-2019
  •  | 
  •  

Pregunta

Estoy tratando de familiarizarse con el rubí nueva selenio WebDriver tal como aparece más intuitivo sobre todo que la versión anterior del selenio y el conductor de rubí que iba con ella. Además, he tenido problemas para conseguir el viejo selenio para el trabajo con el rubí 1.9.1 en Windows por lo que pensé en buscar una alternativa. Hasta ahora he hecho esto con mi guión:

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")

Así que, básicamente estoy ingresando a mi sitio y tratar de añadir una entrada de educación al perfil de usuario .. tengo una referencia a un cuadro de selección con las opciones (en la variable country_select) y ahora quiero seleccionar una opción con un valor dado .. no veo cómo hacer esto en el nuevo cliente .. la única cosa que puedo pensar en hacer que se bucle a través de todas las opciones hasta que encuentre el que yo quiero, y luego llamar execute_script: http://selenium.googlecode.com/svn/ trunk / docs / api / rb / selenio / WebDriver / Driver.html # execute_script-class_method método para ajustar el selectedIndex.

¿Hay alguna otra manera de hacer esto? En la API de Java para el selenio 2.0 / WebDriver aquí: http://seleniumhq.org/docs/09_webdriver.html hay un ejemplo de hacer esto

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

No parece que la versión de rubí tiene esta característica, aunque a menos que me falta algo. Cualquier ayuda sería muy apreciada.

¿Fue útil?

Solución

Tenga en cuenta que ninguno de los trabajos por encima de la voluntad más. Element#select y Element#toggle han quedado obsoletos. Es necesario hacer algo como:

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

Otros consejos

La revelación completa aquí:. Absolutamente ningún conocimiento He de trabajo de Rubí

Sin embargo, yo soy bastante bueno con selenio, así que creo que puedo ayudar. Creo que lo que estás buscando es la método select . Si rubí es nada parecido a los otros conductores puede utilizar el método de selección para contar una de las opciones que se ha seleccionado.

En términos 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;
        }
    }

La Selección de objeto que tiene encima es en realidad en un paquete especial de ayudas. Sólo existe para Java y .Net en el momento (ene 2011)

No sé qué versión selenio sucedió esto, pero parece que no es la clase selecta que pnewhook menciona en Selenio 2.20

http: //selenium.googlecode.com/svn-history/r15117/trunk/docs/api/rb/Selenium/WebDriver/Support/Select.html

option = Selenium::WebDriver::Support::Select.new(@driver.find_element(:xpath => "//select"))
option.select_by(:text, "Edam")

pnewhook lo consiguió pero me gustaría para publicar la versión rubí aquí para que todos puedan verlo:

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

Se puede utilizar XPath para evitar un 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 + "']"));
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 esto es sólo una muestra de trabajo.

Para obtener la última versión de WebDriver (RC3) se debe utilizar "click ()" en lugar de setSelected (). . También option.getText () iguales ( "nombre que desea") se debe utilizar en lugar de option.getText () == "nombre que desea" 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;
    }
}

Código rubí 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

La forma más sencilla que encontré fue:

select_elem.find_element. (: Css, "la opción [value = 'some_value']"), haga clic

#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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top