Як вибрати / отримати випадаючий варіант у Selenium 2


96

Я перетворюю свій код селену 1 на селен 2 і не можу знайти жодного простого способу вибрати ярлик у спадному меню або отримати вибране значення спадного меню. Чи знаєте ви, як це зробити в Selenium 2?

Ось два твердження, які працюють у селені 1, а не у 2:

browser.select("//path_to_drop_down", "Value1");
browser.getSelectedValue("//path_to_drop_down");

Ви намагалися знайти його за допомогою Firebug? Використання xpath, створеного за допомогою Firebug / xpather, може полегшити його.

1
Питання не в пошуку або пошуку випадаючого списку. Йдеться про вибір мітки в цьому спадному меню. Я можу знайти спадне меню, але не знаю, який метод викликати в Selenium 2, оскільки select () і getSelectedValue () або getSelectedLabel () не працюють в Selenium 2.
user786045

Відповіді:


184

Перегляньте розділ про заповнення форм за допомогою webdriver в документації про селен та javadoc для класу Select .

Щоб вибрати параметр на основі мітки:

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

Щоб отримати перше вибране значення:

WebElement option = select.getFirstSelectedOption()

By.xpath ("// шлях_до_дропу_ вниз"). Я б замінив це на локатор, такий як By.name, тощо.
Даніель

2
deselectAll викине UnsupportedOperationException, якщо виділення не підтримує кілька виділень
Том Хартвелл,

4
У C # використовуйте клас SelectElement, отже:SelectElement salesExecutiveDropDown = new SelectElement(webDriver.FindElement(By.Id("salesExecutiveId")));
Джеремі Макгі

Fyi цей код не зміг вибрати спадне меню, поки я не прокоментував цей рядок: //select.deselectAll (); Потім воно почало працювати. Ваш пробіг може відрізнятися.
gorbysbm

1
Зауважте, що deselectAllце допустимо лише для багатовибірки: selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/… .
user1205577

5
driver.findElement(By.id("id_dropdown_menu")).click();
driver.findElement(By.xpath("xpath_from_seleniumIDE")).click();

Щасти


4

в рубіні для постійного використання додайте наступне:

module Selenium
  module WebDriver
    class Element
      def select(value)
        self.find_elements(:tag_name => "option").find do |option|
          if option.text == value
            option.click
              return
           end
       end
    end
  end
end

і ви зможете вибрати значення:

browser.find_element(:xpath, ".//xpath").select("Value")

3

Спробуйте використати:

selenium.select("id=items","label=engineering")

або

selenium.select("id=items","index=3")

0

Подібним варіантом до того, що було опубліковано вище Яндерсоном, було б просто використовувати метод .GetAttribute у селені 2. Використовуючи це, ви можете захопити будь-який предмет, що має певне значення або мітку, який ви шукаєте. Це можна використовувати, щоб визначити, чи має елемент мітку, стиль, значення тощо. Поширений спосіб це зробити - прокрутити елементи у спадному меню, поки не знайдете той, який ви хочете, і виберіть його. В C #

int items = driver.FindElement(By.XPath("//path_to_drop_Down")).Count(); 
for(int i = 1; i <= items; i++)
{
    string value = driver.FindElement(By.XPath("//path_to_drop_Down/option["+i+"]")).GetAttribute("Value1");
    if(value.Conatains("Label_I_am_Looking_for"))
    {
        driver.FindElement(By.XPath("//path_to_drop_Down/option["+i+"]")).Click(); 
        //Clicked on the index of the that has your label / value
    }
}

0

ви можете зробити так:

public void selectDropDownValue(String ValueToSelect) 
{

    webelement findDropDownValue=driver.findElements(By.id("id1"))    //this will find that dropdown 

    wait.until(ExpectedConditions.visibilityOf(findDropDownValue));    // wait till that dropdown appear

    super.highlightElement(findDropDownValue);   // highlight that dropdown     

    new Select(findDropDownValue).selectByValue(ValueToSelect);    //select that option which u had passed as argument
}

0

Цей метод поверне вибране значення для спадного меню,

public static String getSelected_visibleText(WebDriver driver, String elementType, String value)
  {
    WebElement element = Webelement_Finder.webElement_Finder(driver, elementType, value);
   Select Selector = new Select(element);
    Selector.getFirstSelectedOption();
    String textval=Selector.getFirstSelectedOption().getText();
    return textval;
  }

Тим часом

Рядок textval = Selector.getFirstSelectedOption ();

element.getText ();

Поверне всі елементи у спадному меню.


-2

Це код для вибору значення зі спадного меню

Значення для selectlocator буде xpath або ім'я випадаючого вікна, а для optionLocator буде значення, яке буде вибрано з випадаючого вікна.

public static boolean select(final String selectLocator,
        final String optionLocator) {
    try {
        element(selectLocator).clear();
        element(selectLocator).sendKeys(Keys.PAGE_UP);
        for (int k = 0; k <= new Select(element(selectLocator))
                .getOptions().size() - 1; k++) {
            combo1.add(element(selectLocator).getValue());
            element(selectLocator).sendKeys(Keys.ARROW_DOWN);
        }
        if (combo1.contains(optionLocator)) {
            element(selectLocator).clear();
            new Select(element(selectLocator)).selectByValue(optionLocator);
            combocheck = element(selectLocator).getValue();
            combo = "";

            return true;
        } else {
            element(selectLocator).clear();
            combo = "The Value " + optionLocator
                    + " Does Not Exist In The Combobox";
            return false;
        }
    } catch (Exception e) {
        e.printStackTrace();
        errorcontrol.add(e.getMessage());
        return false;
    }
}



private static RenderedWebElement element(final String locator) {
    try {

        return (RenderedWebElement) drivers.findElement(by(locator));
    } catch (Exception e) {
        errorcontrol.add(e.getMessage());
        return (RenderedWebElement) drivers.findElement(by(locator));
    }
}

Дякую,

Реха.


4
-1 Шлях надскладний та із використанням застарілих методів (RenderedWebElement)
Ardesco
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.