Wie kann ich eine Option festlegen, wie Selen WebDriver (Selen 2.0) Client in rubin ausgewählt mit

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

  •  10-10-2019
  •  | 
  •  

Frage

Ich versuche, mit den neuen Rubin Selen-WebDriver vertraut zu machen, wie es intuitiver erscheint meist als die vorherige Version von Selen und dem Rubin-Treiber, der mit ihm ging. Außerdem hatte ich Mühe, die alten Selen zur Arbeit mit Ruby 1.9.1 in den Fenstern so dass ich dachte, dass ich nach einer Alternative aussehen würde. Bisher habe ich dies getan mit meinem Skript:

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

Also im Grunde ist ich die Anmeldung in meiner Seite und versuche, eine Ausbildung Eintritt in meinem Benutzerprofil hinzuzufügen .. Ich habe einen Verweis auf ein Auswahlfeld mit Optionen (in dem country_select Variable) und jetzt will ich eine Option wählen mit ein gegebener Wert .. ich sehe nicht, wie dies in den neuen Client tun .. das einzige, was ich zu tun, durch alle Optionen denken kann, ist Looping, bis ich die, die ich möchte finden, und dann execute_script nennen: http://selenium.googlecode.com/svn/ trunk / docs / api / rb / Selen / WebDriver / Driver.html # execute_script-class_method Methode, um die selectedIndex einzustellen.

Gibt es eine andere Möglichkeit, dies zu tun? In dem Java-API für Selen 2.0 / WebDriver hier: http://seleniumhq.org/docs/09_webdriver.html gibt es ein Beispiel dieses

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

Es ist nicht ersichtlich, dass die Ruby-Version dieses Feature allerdings hat, es sei denn ich etwas fehle. Jede mögliche Hilfe würde geschätzt.

War es hilfreich?

Lösung

Bitte beachten Sie, dass keine der oben genannten Wille Arbeit mehr. Element#select und Element#toggle sind veraltet. Sie tun müssen, um so etwas wie:

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

Andere Tipps

Vollständige Offenlegung hier:. Ich habe absolut keine Kenntnisse von Ruby

Aber ich bin ziemlich gut mit Selen so dass ich denke, ich kann helfen. Ich denke, was Sie suchen ist die select Methode. Wenn Rubin so etwas wie die anderen Fahrer ist, können Sie die Methode wählen Sie eine der Optionen sagen, es ausgewählt ist.

In Pseudo-Code / java Bedingungen wäre es etwa so aussehen

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

Das Objekt wählen Sie oben haben, ist tatsächlich in einem speziellen Support-Paket. Es existiert nur für Java und .NET zur Zeit (Januar 2011)

Ich weiß nicht, was Version Selen dazu kam, aber es sieht aus wie es die Select-Klasse ist, dass pnewhook in Selenium erwähnt 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")

got pnewhook es, aber ich mag die Ruby-Version hier veröffentlichen, damit jeder sehen kann:

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

Sie können mit XPath vermeiden Looping:

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

oder

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

In meinem Fall ist dies nur eine Arbeitsprobe.

Für die neueste Version von WebDriver (RC3) sollten Sie verwenden "klicken ()" statt setSelected (). . Auch option.getText () gleich ( "Name Sie wollen") anstelle von option.getText () == "Name, den Sie wollen" in JAVA verwendet werden soll:

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

Ruby-Code mit Beispiel:

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

Der einfachste Weg, ich fand, war:

select_elem.find_element. (: Css "Option [value = 'some_value']") klicken

#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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top