如何在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.硒2,因为选择()和getSelectedValue()或getSelectedLabel()来调用哪个方法不起作用在硒
user786045

Answers:


184

查看Selenium文档中有关使用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的定位器。
丹尼尔(Daniel)

2
如果选择项不支持多个选择,则deselectAll将引发UnsupportedOperationException
Tom Hartwell 2013年

4
在C#中,使用SelectElement类,因此:SelectElement salesExecutiveDropDown = new SelectElement(webDriver.FindElement(By.Id("salesExecutiveId")));
Jeremy McGee

直到我注释掉此行,此代码才能够选择下拉列表://select.deselectAll(); 然后它开始工作。你的旅费可能会改变。
gorbysbm 2014年

1
请注意,这deselectAll仅适用于多重选择:selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/…
user1205577 2014年

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方式过于复杂并使用不推荐使用的方法(RenderedWebElement)
Ardesco 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.