Comment puis-je configurer une option, comme sélectionné Sélénium WebDriver (sélénium 2.0) client en ruby

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

  •  10-10-2019
  •  | 
  •  

Question

Je suis en train de se familiariser avec le nouveau sélénium WebDriver rubis tel qu'il apparaît plus intuitive surtout que la version précédente du sélénium et le pilote rubis qui allait avec. De plus, j'ai eu du mal à obtenir le vieux sélénium à travailler avec Ruby 1.9.1 dans les fenêtres, donc je pensais que je cherche une solution de rechange. Jusqu'à présent, je l'ai fait avec mon 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")

Donc, fondamentalement, je vous connecter à mon site et essayer d'ajouter une entrée d'éducation à mon profil utilisateur .. J'ai une référence à une zone de sélection avec des options (dans la variable country_select) et maintenant je veux choisir une option avec une valeur donnée .. Je ne vois pas comment faire cela dans le nouveau client .. la seule chose que je peux penser à faire est une boucle à travers toutes les options jusqu'à ce que je trouve celui que je veux, puis appelez execute_script: http://selenium.googlecode.com/svn/ trunk / docs / api / rb / sélénium / WebDriver / Driver.html # execute_script-class_method Procédé pour régler la selectedIndex.

Y at-il une autre façon de le faire? Dans le api java pour le sélénium 2.0 / WebDriver ici: http://seleniumhq.org/docs/09_webdriver.html il est un exemple de le faire

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

Il ne semble pas que la version rubis a cette fonction que si je ne me manque quelque chose. Toute aide serait appréciée.

Était-ce utile?

La solution

S'il vous plaît noter qu'aucun des ci-dessus fonctionnera plus. Element#select et Element#toggle ont été désapprouvés. Vous devez faire quelque chose comme:

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

Autres conseils

pnewhook a mais je voudrais poster la version rubis ici que tout le monde peut le voir:

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

Vous pouvez utiliser XPath pour éviter les boucles:

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

ou

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

Dans mon cas, ce n'est qu'un échantillon de travail.

Pour la dernière version de WebDriver (RC3), vous devez utiliser "cliquez sur ()" au lieu de setSelected (). . De plus option.getText () equals ( "nom que vous voulez") devrait être utilisé au lieu de option.getText () == "nom que vous voulez" 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;
    }
}

Code de Ruby avec Exemple:

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 façon la plus simple que j'ai trouvé:

select_elem.find_element. (: Css, "option [value = 'some_value']") cliquez sur

#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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top