【问题标题】:how to select element in multi select box in selenium webdriver如何在 selenium webdriver 的多选框中选择元素
【发布时间】:2014-02-20 16:58:57
【问题描述】:

目前正在研究 Selenium WebDriver 并使用 Java.. 我想知道在 Multi-select 框中选择值。选项已被选中。如果我想选择任何两个或更多选项。如何执行该操作。

HTML 如下:

<select id="swpacksId" multiple="" style="width: 125px; display: none;" name="swPacks[]">
<option selected="" value="ADVIP">ADVIP</option>
<option selected="" value="ADVLEG">ADVLEG</option>
<option selected="" value="ADVSEC">ADVSEC</option>
<option selected="" value="Boot">Boot</option>
<option selected="" value="H323">H323</option>
<option selected="" value="IBC">IBC</option>
<option selected="" value="MULTI">MULTI</option>
<option selected="" value="None">None</option>
</select>

【问题讨论】:

    标签: java html selenium selenium-webdriver


    【解决方案1】:
    WebElement programs = driver.findElement(By.xpath("//*[@id=\'contentblock\']/section/div[6]/select"));
    
    programs.sendKeys(Keys.CONTROL+"a");
    

    【讨论】:

    • 您的答案可以通过添加额外的信息来改进,例如您的代码的作用以及它如何帮助 OP。
    【解决方案2】:

    试试下面这段代码--> //https://jqueryui.com/selectable/

    int i=0;<br>
    Actions actObj = new Actions(driverObj);    <br>    
    for(WebElement ele: selectableList){<br>
        actObj.moveToElement(ele);<br>
        actObj.keyDown(Keys.CONTROL).click(ele).build().perform();<br>
        System.out.println("selectableList["+i+"] = "+ele.getText()+" Clicked");<br>
        i++;<br>
    }<br>
    

    【讨论】:

      【解决方案3】:

      我花了很长时间尝试使用 Chrome 的 webdriver 按下控制键来模拟单击。经过一番调查,当您在多选的 OPTION 元素上生成点击时,实际上并没有发生点击。相反,更改事件是在浏览器中生成的。这会导致以下情况,即随后对多选的其他选项的“单击”不会清除先前选择的选项,这有时是不受欢迎的行为。 为了解决这个问题,我想出了以下解决方案:

      Actions actions = new Actions(driver);
      if(controlNeeded)
          actions.keyDown(Keys.CONTROL);
      actions.moveToElement((WebElement) option_you_want_to_click);
      actions.clickAndHold();
      actions.pause(100);
      actions.release();
      if(controlNeeded)
          actions.keyUp(Keys.CONTROL);
      actions.build().perform();
      

      这样您可以根据 Ctrl 键选择单个和多个元素。

      【讨论】:

        【解决方案4】:

        在函数中传递值列表,使用任何分隔符让我们说逗号作为分隔符:

        public static void selectMultipelValues(String multipleVals) {
           String multipleSel[] = multipleVals.split(",");
        
           for (String valueToBeSelected : multipleSel) {
              new Select(driver.findElement(By.id(propId))).selectByVisibleText(valueToBeSelected);
              driver.findElement(By.id(ddObj)).sendKeys(Keys.CONTROL);
           }
        }
        

        【讨论】:

        • 什么是ddObj?这是如何工作的:首先你选择一些东西,然后你发送CONTROL,然后你选择下一个项目?
        • 在取一个字符串然后用逗号 (,) 分割时要小心。如果一个或多个选项的可见文本本身包含逗号怎么办?为什么不直接让selectMultipleValues 取一个字符串数组呢?
        【解决方案5】:

        使用下面的代码,简单易行!!它对我有用。

        Select dd1 = new Select(driver.findElement(By.name("swPacks[]")));
        dd1.selectByVisibleText("ADVIP");
        dd1.selectByVisibleText("ADVLEG");
        

        【讨论】:

          【解决方案6】:

          这对我有用:

          final String[] textOptions = {"value1", "value2"};
          final WebElement element = driver.findElement(By.id("someId"));
          final Select dropdown = new Select(element);
          final List<WebElement> options = dropdown.getOptions();
          final Actions builder = new Actions(driver);
          final boolean isMultiple = dropdown.isMultiple();
          if (isMultiple) {
              dropdown.deselectAll();
          }
          builder.keyDown(Keys.CONTROL);
          for (String textOption : textOptions) {
              for (WebElement option : options) {
                  final String optionText = option.getText().trim();
                  if (optionText.equalsIgnoreCase(textOption)) {
                      if (isMultiple) {
                          if (!option.isSelected()) {
                              builder.click(option);
                          }
                      } else {
                          option.click();
                      }
                      break;
                  }
              }
          }
          builder.keyUp(Keys.CONTROL).build().perform();
          

          【讨论】:

            【解决方案7】:

            对于多个部分,您可以这样做:

            Select select = new Select(element);
            Actions builder = new Actions(driver);
            builder.keyDown(Keys.CONTROL)
            .click(select.getOptions().get(2))
            .click(select.getOptions().get(3))
            .click(select.getOptions().get(4))
            .keyUp(Keys.CONTROL);
            
            builder.build().perform();
            

            【讨论】:

              【解决方案8】:

              您需要单击带有控件的元素。 这是如何进行此类操作的文档 https://code.google.com/p/selenium/wiki/AdvancedUserInteractions

              在我们的例子中可能是:

              Select select = new Select(element);
              
              Actions builder = new Actions(driver);
              builder.keyDown(Keys.CONTROL)
              .click(select.getOptions().get(2))
              .keyUp(Keys.CONTROL);
              
              builder.build().perform();
              

              【讨论】:

                【解决方案9】:
                new Select(driver.findElementByXPath("XXXXXXXXXXX"))).selectByIndex(2);
                

                【讨论】:

                • 如果你有一个下拉/组合框可以使用上面的。索引从0开始。
                • 这不是在回答问题。他询问了多选,而您的答案仅适用于单选。
                【解决方案10】:

                如果你有Utils这样的静态方法:

                public static void selectTheDropDownList(WebElement dropDown,String text)
                {
                    Select select = new Select(dropDown);
                    select.selectByVisibleText(text);       
                }
                

                你可以这样做,选择多个选项:

                Utils.selectTheDropDownList(dropDown,text1);
                Utils.selectTheDropDownList(dropDown,text2);
                . . . 
                Utils.selectTheDropDownList(dropDown,textn);
                

                这应该可行。

                【讨论】:

                • Utils 是什么/在哪里?它属于 Selenium 还是 Java?
                • 再看一遍,Utils 是包含刚才描述的selectTheDropDownList 方法的示例类名
                【解决方案11】:

                我已经编写了这样的代码..第一次我取消选择了多选框中的所有值然后我选择了我想要的值..它工作正常..

                Log.info("Clicking on Softwarepack dropdown");
                JavascriptExecutor executor31 = (JavascriptExecutor)driver;
                executor31.executeScript("document.getElementById('swpacksId').style.display='block';");
                Select select31 = new Select(driver.findElement(By.id("swpacksId")));
                select31.deselectAll();
                select31.selectByVisibleText("ADVLEG");
                Thread.sleep(6000);
                JavascriptExecutor executor32 = (JavascriptExecutor)driver;
                executor32.executeScript("document.getElementById('swpacksId').style.display='block';");
                Select select32 = new Select(driver.findElement(By.id("swpacksId")));
                select32.selectByVisibleText("SIP");
                

                【讨论】:

                  【解决方案12】:

                  请检查以下网址是否对您有帮助

                  http://selenium.polteq.com/en/controlling-a-selectbox-or-dropdownbox-with-selenium-webdriver/

                  您可以检查以下选项

                  public void selectByValue() { 
                       Select selectBox = 
                             new Select(driver.findElement(By .cssSelector("select#id_contact")));       
                       selectBox.selectByValue("2"); 
                  }
                  
                  public void selectByIndex() {  
                       Select selectBox = 
                             new Select(driver.findElement(By.cssSelector("select#id_contact"))); 
                       selectBox.selectByIndex(2); 
                  }
                  

                  你可以根据你的要求改变它

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2019-06-03
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多