Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Selenium从下拉列表中选择多个选项_Java_Arrays_Selenium_Select_Selenium Webdriver - Fatal编程技术网

Java Selenium从下拉列表中选择多个选项

Java Selenium从下拉列表中选择多个选项,java,arrays,selenium,select,selenium-webdriver,Java,Arrays,Selenium,Select,Selenium Webdriver,我必须从下拉列表中选择多个值[一些值被隐藏,直到我向下滚动]。我可以选择多个选项,但我认为必须有更好的方法从下拉列表中选择多个值 我正在使用参数化传递值,我想选择 如果下拉列表是多个,我将通过for循环查找所有选项,直到找到参数化值 我在我的测试用例中调用这个方法 test.选择multi(“foo”) test.选择multi(“fooz”) 我可以选择这两个选项,但我不认为这是最优化的方法 有人知道传递多个值的更好方法吗?这是参数化的一部分,并在找到选项后选择。请记住,有时我可能不得不选择一

我必须从下拉列表中选择多个值[一些值被隐藏,直到我向下滚动]。我可以选择多个选项,但我认为必须有更好的方法从下拉列表中选择多个值

  • 我正在使用参数化传递值,我想选择
  • 如果下拉列表是多个,我将通过for循环查找所有选项,直到找到参数化值
  • 我在我的测试用例中调用这个方法
  • test.选择multi(“foo”)
  • test.选择multi(“fooz”)
  • 我可以选择这两个选项,但我不认为这是最优化的方法
  • 有人知道传递多个值的更好方法吗?这是参数化的一部分,并在找到选项后选择。请记住,有时我可能不得不选择一个选项,有时两个,有时更多的选项

    public void selectMulti (String list) {
    
        WebElement list = driver.findElement(By.id("abc"));
        Select select = new Select(list);
    
        if (select.isMultiple()) {
    
            try {
                List<WebElement> optionLists = select.getOptions();
                listFound = false;
                for (int i = 0; i < optionLists.size(); i++) {
                    String text = optionLists.get(i).getText();
                    if (text.equals(list)) {
                        optionLists.get(i).click();
                        listFound = true; break;
            }
                } if (listFound) {
        Log.pass();
                } else {
        Log.failed();
                }
            }  catch (StaleElementReferenceException e) {
                e.printStackTrace();
            }   
    
        } else {
        Log.failed();
        }
    
        }
    
    public void selectMulti(字符串列表){
    WebElement list=driver.findElement(By.id(“abc”));
    选择=新选择(列表);
    如果(选择.isMultiple()){
    试一试{
    List optionLists=select.getOptions();
    listFound=false;
    对于(int i=0;i
    我会做更多类似的事情。它解决了我在评论中提到的问题,还稍微清理了代码,并添加了一些额外的错误案例。由于下拉列表是一个
    SELECT
    ,因此您可以使用相关的方法,其中一个方法是
    selectByVisibleText()
    ,因此您不必循环查看
    选项并单击它们

    public void selectMulti(String[] listItems)
    {
        Select select = new Select(driver.findElement(By.id("abc")));
    
        if (listItems.length > 1 && !select.isMultiple())
        {
            Log.fail("The SELECT is not a multiple select but the list provided is larger than 1.");
            return;
        }
    
        for (String listItem : listItems)
        {
            try
            {
                select.selectByVisibleText(listItem);
            }
            catch (NoSuchElementException e)
            {
                Log.failed(listItem + " was not an available option");
                e.printStackTrace();
                return;
            }
        }
    }
    

    你有几个问题,我马上就看出来。1.第一行代码将
    列表
    重新定义为
    WebElement
    ,该元素在传递到函数中的
    字符串列表
    上敲打。2.您传入的
    字符串列表
    应该是
    字符串[]列表
    (一个
    字符串
    数组),以处理您要选择多个项目的情况。没问题,很乐意提供帮助。