如何从下拉菜单中选择元素

时间:2018-07-20 10:49:45

标签: java selenium selenium-webdriver xpath selenium-chromedriver

这里我在Common.java类中创建一个通用方法,用于基于visibleText选择元素。在另一个类( NewTest.java )中,我调用{{ 1}}。但是当我调试该程序时,它显示     发现错误:

  

org.openqa.selenium.support.ui.UnexpectedTagNameException:

元素应为“ 选择”,但应为“ 输入”。那么如何从下拉列表中选择员工?

1)Common.java

sellectByVisibleText

1)NewTest.java

    public static String selectByVisibletext(String xPath,String inputData, WebDriver driver) {
                WebElement webElement = driver.findElement(By.xpath(xPath));
                try {
                    System.out.println(inputData);
                    System.out.println(xPath);
                    System.out.println(driver);
                    Select selectBox = new Select(webElement);
                    selectBox.selectByVisibleText(inputData);
                } 
                catch (Exception e) {
                    System.out.println("error found : "+e);
                }
                return inputData;
            }

3 个答案:

答案 0 :(得分:1)

如果标签不是“ select”标签,则可以使用类似的方法:

public static String selectByVisibletext(String xPath,String inputData, WebDriver driver) {
        WebElement webElement = driver.findElement(By.xpath(xPath));
        try {
            System.out.println(inputData);
            System.out.println(xPath);
            System.out.println(driver);
            Select selectBox = new Select(webElement);
            selectBox.selectByVisibleText(inputData);
        } 
        catch (Exception e) {
           if (e.getMessage().contains("UnexpectedTagNameException")) {
               List<WebElement> dropDown = driver.findElements(By.xpath(xPath));
               dropDown.forEach(dropElement -> {
                   if (dropElement.getAttribute("innerText").equals(inputData)) {
                       dropElement.click();
                   }
               });
           }
        }
        return inputData;
    }

概念是使用列表中的选择器收集元素,然后找到所需的可选元素的匹配项,然后单击它。

首先单击“ // input [@ class ='select2-search__field']”,然后为所有下拉元素找到一个选择器,然后将其作为WebElement列表获取,并通过匹配文本进行选择。

答案 1 :(得分:0)

Select类仅适用于具有选项字段的SELECT标记。如果没有选项字段,将被拒绝。如果您可以发布HTML,那就太好了。而且,您还将包含INPUT标签的字符串传递到您的方法中。您应该传递实际上包含SELECT标记的XPATH。

很明显,下面的内容(您要传递给方法的内容)是输入字段而非选择字段的XPATH:

String search = "//input[@class='select2-search__field']";

答案 2 :(得分:0)

如果下拉列表不是由 select options HTML tags 组成的,则Selenium select类将无法使用。

在这种情况下,您将必须将所有选项存储在列表中。然后,您可以遍历列表并放置一个条件。就像是。

首先单击下拉菜单。

driver.findElement(By.id("select2-acc_roles-container")).click();   

然后将每个选项存储在这样的列表中:

List<WebElement> options = driver.findElements(By.xpath("xpath for all option. This xpath should contain every options"));
      for(WebElement option : options) {
          if(option.getText().trim().contains("What you want to select from drop down")) {
              option.click();
          }  
      }  

希望这会有所帮助。