セレン2のドロップダウンオプションを選択/取得する方法


96

私は私のセレン1コードをセレン2に変換していて、ドロップダウンメニューでラベルを選択したり、ドロップダウンの選択した値を取得する簡単な方法を見つけることができません。Selenium 2でそれを行う方法を知っていますか?

以下は、Selenium 1では機能するが2では機能しない2つのステートメントです。

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

Firebugを使用してそれを見つけようとしましたか?Firebug / xpatherで生成されたxpathを使用すると、より簡単になります。

1
問題は、ドロップダウンを見つけるか見つけることではありません。そのドロップダウンでラベルを選択することについてです。私は、ドロップダウンを見つけることができますが、2セレンに選択以来、セレン2()とgetSelectedValue()またはgetSelectedLabel()で呼び出して仕事をしませんするためにどの方法がわからない
user786045

回答:


184

セレンのドキュメントのWebdriver 使用したフォームの入力に関するセクションと、Selectクラスのjavadoc のセクションをご覧ください

ラベルに基づいてオプションを選択するには:

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

最初に選択した値を取得するには:

WebElement option = select.getFirstSelectedOption()

By.xpath( "// path_to_drop_down")。これをBy.nameなどのロケーターに置き換えます。
ダニエル

2
選択が複数選択をサポートしていない場合、deselectAllはUnsupportedOperationExceptionをスローします
Tom Hartwell

4
C#では、そう、SelectElementクラスを使用しますSelectElement salesExecutiveDropDown = new SelectElement(webDriver.FindElement(By.Id("salesExecutiveId")));
ジェレミー・マギー

Fyiこのコードは、この行をコメント化するまで、ドロップダウンを選択できませんでした://select.deselectAll(); それからそれは働き始めました。あなたのマイレージは異なる場合があります。
gorbysbm 2014年

1
複数deselectAll選択に対してのみ有効であることに注意してください:selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/…
user1205577 14年

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

上記でjandersonによって投稿されたものと同様のオプションは、セレン2で.GetAttributeメソッドを使用するだけです。これを使用すると、探している特定の値またはラベルを持つアイテムを取得できます。これは、要素にラベル、スタイル、値などがあるかどうかを判断するために使用できます。これを行う一般的な方法は、ドロップダウンの項目をループして、必要な項目を見つけて選択することです。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;
  }

その間

String 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.