如何从下拉列表中选择所有列表选项循环通过它们选择每个选项



如何从下拉列表中选择所有列表选项,通过它们循环选择每个选项。

try {
        WebElement dropdown = RemindersElements.drpEvent(driver);
        List<WebElement> dropdownOptions = driver.findElements(By.xpath("//[@id='leftContent']/div[2]/d‌​iv[1]/div/select/opt‌​ion"));
        System.out.println("Dropdown Size: " + dropdownOptions.size());
        // Set value of dropdown using JS
        for (int i = 0; i < dropdownOptions.size(); i++) {
            String str = dropdownOptions.get(i).getText();
            JavascriptExecutor jse = (JavascriptExecutor) driver;
            jse.executeScript(String.format("arguments[0].value='%s';", str), dropdown);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
public static WebElement drpEvent(WebDriver driver) {
        try {
            element = driver.findElement(By.xpath("//[@id='leftContent']/div[2]/div[1]/div/select"));          
        } catch (Exception e) {
            throw (e);
        }
        return element;
    }

我想一一选择所有选项。 但是这里硒没有给出任何错误,并且在上述之后执行下一步,并且我无法看到是否选择了任何选项。我想触发与该选择元素附加的更改事件。它只会更改所选项目,但不会触发附加的更改事件。

HTML DOM

更新

try {
        WebElement dropdown = RemindersElements.drpEvent(driver);
        List<WebElement> dropdownOptions = dropdown.findElements(By.xpath("//option"));
        System.out.println("Dropdown Size: " + dropdownOptions.size());
        // Set value of dropdown using JS
        for (int i = 0; i < dropdownOptions.size(); i++) {
            String str = dropdownOptions.get(i).getAttribute("value");
            JavascriptExecutor jse = (JavascriptExecutor) driver;
            Thread.sleep(1500);
            jse.executeScript(String.format("arguments[0].value='%s';", str), dropdown);
            Thread.sleep(1500);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

我使用类似于页面中的<select>下拉列表尝试了此操作:

public void foo() {
    try {
        Select dropdown = new Select(RemindersElements.drpEvent(driver));
        System.out.println("Dropdown Size: " + dropdown.getOptions().size());
        for (int i = 0; i < dropdown.getOptions().size(); i++) {
            String text = dropdown.getOptions().get(i).getText();
            dropdown.selectByVisibleText(text);
            System.out.println("Option " + (i + 1) + ":" + text);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

您可能需要检查的一些事项:

  • 查看从RemindersElements.drpEvent(driver)创建的dropdown实例是否有效。打印总选项。根据您的屏幕截图,它应该打印 6。
  • 循环应从索引0开始
  • 将 try catch 块移到循环外,以便正确调试

    参考页面:http://way2automation.com/way2auto_jquery/dropdown/default.html

    更新 1:
    下面列出了您可以尝试的其他一些事情。只要您的RemindersElements.drpEvent(driver)返回有效元素,这些应该有效。

    public void bar() {
        try {
            WebElement dropdown = RemindersElements.drpEvent(driver);
            List<WebElement> dropdownOptions = dropdown.findElements(By.xpath("//option"));
            System.out.println("Dropdown Size: " + dropdownOptions.size());
            // Click the dropdown and click each option one by one
            for (int i = 0; i < dropdownOptions.size(); i++) {
                dropdown.click();
                dropdownOptions.get(i).click();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public void baz() {
        try {
            WebElement dropdown = RemindersElements.drpEvent(driver);
            List<WebElement> dropdownOptions = dropdown.findElements(By.xpath("//option"));
            System.out.println("Dropdown Size: " + dropdownOptions.size());
            // Set value of dropdown using JS
            for (int i = 0; i < dropdownOptions.size(); i++) {
                String str = dropdownOptions.get(i).getText();
                JavascriptExecutor jse = (JavascriptExecutor) driver;
                jse.executeScript(String.format("arguments[0].value='%s';", str), dropdown);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    更新 2:
    在 RemindersElements 类中添加以下内容:

    public static List <WebElement> drpEventOpts(WebDriver driver) {
            try {
                List <WebElement> elements = driver.findElements(By.xpath("//[@id='leftContent']/div[2]/div[1]/div/select/option"));          
            } catch (Exception e) {
                throw (e);
            }
            return elements;
        }
    

    然后替换此行:

    List<WebElement> dropdownOptions = RemindersElements.drpEventOpts(driver);
    
  • 试试这个

    public static void  checkDropdownAllOption(WebDriver driver,WebElement lelement)
    {
        Select oSelect = new Select(lelement);
        java.util.List <WebElement> elementCount = oSelect.getOptions();
        int iSize = elementCount.size();
        String [] arrdropdown= new String [iSize];          
        for (int j = 0; j < iSize; j++) 
        {
            arrdropdown[j]=elementCount.get(j).getText();
        }
        WebElement mySelectElm = lelement;              
        Select mySelect= new Select(mySelectElm);       
        for (int i = 0; i < arrdropdown.length; i++) 
        {
            mySelect.selectByVisibleText(arrdropdown[i]);
        }   
    }
    

    最新更新