Come faccio a impostare un'opzione come selezionato mediante selenio WebDriver (selenio 2.0) cliente in rubino

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

  •  10-10-2019
  •  | 
  •  

Domanda

Sto cercando di prendere confidenza con la nuova rubino selenio WebDriver come appare più intuitiva per lo più rispetto alla versione precedente di selenio e il conducente rubino che è andato con esso. Inoltre, ho avuto difficoltà a raggiungere il vecchio selenio al lavoro con Ruby 1.9.1 in finestre così ho pensato di cercare un'alternativa. Finora ho fatto questo con il mio 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")

Quindi, fondamentalmente sto accedendo al mio sito e cercando di aggiungere una voce di istruzione al mio profilo utente .. Ho un riferimento a una casella di selezione con le opzioni (nella variabile country_select) e ora voglio selezionare un'opzione con un dato valore .. non vedo come fare questo nel nuovo client .. l'unica cosa che posso pensare di fare è il ciclo attraverso tutte le opzioni fino a trovare quello che voglio, e quindi chiamare execute_script: http://selenium.googlecode.com/svn/ trunk / docs / api / RB / selenio / WebDriver / Driver.html # execute_script-class_method il metodo per impostare il selectedIndex.

C'è un altro modo per fare questo? In Java API per il selenio 2.0 / WebDriver qui: http://seleniumhq.org/docs/09_webdriver.html v'è un esempio di fare questo

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

non sembra che la versione ruby ??ha questa caratteristica anche se a meno che non mi manca qualcosa. Qualsiasi aiuto sarebbe apprezzato.

È stato utile?

Soluzione

Si prega di notare che nessuno dei lavori volontà sopra più. Element#select e Element#toggle sono stati deprecati. Hai bisogno di fare qualcosa di simile:

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

Altri suggerimenti

Full disclosure qui:. Conoscenza che ho assolutamente alcun lavoro di Ruby

Tuttavia, sono abbastanza bravo con selenio così penso di poter aiutare. Penso che quello che stai cercando è la metodo select . Se rubino è qualche cosa come gli altri piloti è possibile utilizzare il metodo di selezione per raccontare una delle opzioni è selezionata.

In termini pseudocodice / java sarebbe simile a questa

    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;
        }
    }

L'oggetto Select si dispone sopra è in realtà in un pacchetto di supporto speciale. Esiste solo per Java e .Net in questo momento (gen 2011)

Non so quale versione selenio questo è venuto su, ma sembra che ci sia la classe Select che pnewhook menzionato in 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 capito, ma mi piacerebbe inviare la versione rubino qui in modo che tutti possano vedere che:

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

È possibile utilizzare XPath per evitare il loop:

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

Nel mio caso questo è solo un campione di lavoro.

Per la versione più recente di WebDriver (RC3) si dovrebbe usare "click ()" invece di setSelected (). . Anche option.getText () equals ( "nome che si desidera") dovrebbe essere usato al posto di option.getText () == "nome che si desidera" in 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;
    }
}

Codice rubino con Esempio:

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

Il modo più semplice che ho trovato era:

select_elem.find_element. (: Css, "l'opzione [value = 'some_value']") clicca

#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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top