Selenium 2에서 드롭 다운 옵션을 선택 / 가져 오는 방법


96

셀레늄 1 코드를 셀레늄 2로 변환하고 있는데 드롭 다운 메뉴에서 레이블을 선택하거나 드롭 다운에서 선택한 값을 얻는 쉬운 방법을 찾을 수 없습니다. Selenium 2에서 어떻게하는지 알고 있습니까?

다음은 Selenium 1에서는 작동하지만 2에서는 작동하지 않는 두 가지 진술입니다.

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

Firebug를 사용하여 찾으셨습니까? Firebug / xpather로 생성 된 xpath를 사용하면 더 쉽게 만들 수 있습니다.

1
문제는 드롭 다운을 찾거나 찾는 것이 아닙니다. 그 드롭 다운에서 라벨을 선택하는 것에 관한 것입니다. 나는 드롭 다운을 찾을 수 있지만, 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를 throw합니다
톰 하트웰

4
: C #에서, 그래서 SelectElement 클래스 사용SelectElement salesExecutiveDropDown = new SelectElement(webDriver.FindElement(By.Id("salesExecutiveId")));
제레미 맥기

참고로이 코드는이 줄을 주석 처리 할 때까지 드롭 다운을 선택할 수 없었습니다. //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

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

그 동안에

문자열 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 방법은 overcomplicated 및 사용되지 않는 방법 (RenderedWebElement)
Ardesco
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.