Подтвердить что ты не робот

Как установить параметр, выбранный с помощью клиента Selenium WebDriver (selenium 2.0) в рубине

Я пытаюсь познакомиться с новым ruby ​​selenium-webdriver, поскольку он выглядит более интуитивно понятным, чем предыдущая версия селена и рубиновый драйвер, который был с ним. Кроме того, мне не удалось заставить старый селен работать с ruby ​​1.9.1 в окнах, поэтому я подумал, что буду искать альтернативу. Пока что я сделал это с помощью 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")

Итак, я вхожу в мой сайт и пытаюсь добавить запись в мой профиль пользователя. У меня есть ссылка на поле выбора с параметрами (в переменной country_select), и теперь я хочу выбрать вариант с заданное значение. Я не вижу, как это сделать в новом клиенте. Единственное, что я могу придумать, - это перебрать все параметры до тех пор, пока я не найду тот, который я хочу, а затем вызовите execute_script: http://selenium.googlecode.com/svn/trunk/docs/api/rb/Selenium/WebDriver/Driver.html#execute_script-class_method метод для установки selectedIndex.

Есть ли другой способ сделать это? В java api для selenium 2.0/webdriver здесь: http://seleniumhq.org/docs/09_webdriver.html есть пример этого

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

Не похоже, что рубиновая версия имеет эту функцию, хотя я ничего не теряю. Любая помощь будет оценена.

4b9b3361

Ответ 1

Обратите внимание, что ни одно из вышеперечисленных действий не будет работать. Element#select и Element#toggle устарели. Вам нужно сделать что-то вроде:

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

Ответ 2

Полное раскрытие здесь: у меня нет абсолютно никаких рабочих знаний Ruby.

Однако, я очень хорошо знаком с Selenium, поэтому думаю, что смогу помочь. Я думаю, что вы ищете метод select. Если ruby ​​- это что-то похожее на другие драйверы, вы можете использовать метод select, чтобы указать один из параметров, которые он выбрал.

В псевдокоде/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;
        }
    }

Выбранный выше объект Select находится в специальном пакете поддержки. Он существует только для Java и .Net на данный момент (январь 2011 г.)

Ответ 4

pnewhook получил его, но я хотел бы опубликовать рубиновую версию здесь, чтобы каждый мог ее увидеть:

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

Ответ 5

Вы можете использовать XPath, чтобы избежать цикла:

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

или

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

Ответ 6

Для последней версии Webdriver (RC3) вы должны использовать "click()" вместо setSelected(). Также необходимо использовать option.getText(). Equals ( "Name you want" ) вместо опции .getText() == "Имя, которое вы хотите" в 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;
    }
}

Ответ 7

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

В моем случае это только один рабочий образец.

Ответ 8

Код Ruby с примером:

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

Ответ 9

#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

Ответ 10

Самый простой способ:

select_elem.find_element (: css, "option [value = 'some_value']" ). Нажмите