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

时间:2015-10-28 13:54:09

标签: java arrays selenium select selenium-webdriver

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

  1. 我正在使用参数化来传递值,我想选择。
  2. 如果下拉列表是多个,我将通过循环查找所有选项,直到找到参数化值。
  3. 我在我的测试用例中调用此方法
  4. test.selectMulti(“富”);
  5. test.selectMulti(“福兹”);
  6. 我可以选择这两个选项,但我不认为这是最优化的方式。
  7. 有没有人知道更好的方法来传递参数化的多个值部分并选择一次选项。请记住,有些时候我可能需要选择一个选项,有时候选择两个选项。

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

1 个答案:

答案 0 :(得分:5)

我会做更像这样的事情。它解决了我在评论中提到的问题,并且还清理了一些代码并添加了一些其他错误情况。由于下拉列表为SELECT,因此您可以使用Select相关方法,其中一种方法为selectByVisibleText(),因此您不必循环遍历OPTIONS和点击它们。

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