java 如何选择下拉菜单中的所有选项- Selenium Webdriver?

az31mfrm  于 2022-12-25  发布在  Java
关注(0)|答案(6)|浏览(205)
  • 目前正在使用Selenium WebDriverJava。如果我有一个名为Product的下拉列表名称..
  • 在该下拉菜单中,我有这么多的值(例如:60)。当执行代码时,我取消选择所有选项,然后我选择了我想要的选项,因为默认情况下,所有值都在HTML中选定。
  • 如果我想同时选择所有选项,同样的方法..我该如何执行该操作。
<select id="productId" multiple="" style="width: 125px; display: none;" name="products[]">

<option selected="" value="1020 ROUTER SERIES">1020 ROUTER SERIES</option>

<option selected="" value="1030 ROUTER SERIES">1030 ROUTER SERIES</option>

<option selected="" value="1040 ROUTER SERIES">1040 ROUTER SERIES</option>

<option selected="" value="1061 ROUTER">1061 ROUTER</option>

 </select>

等等。
下面是示例代码:

Log.info("Clicking on Product dropdown");
JavascriptExecutor executor31 = (JavascriptExecutor)driver;
executor31.executeScript("document.getElementById('ProductId').style.display='block';");
Select select31 = new Select(driver.findElement(By.id("ProductId")));
select31.deselectAll();
select31.selectByVisibleText("1222");
Thread.sleep(6000);
JavascriptExecutor executor32 = (JavascriptExecutor)driver;
 executor32.executeScript("document.getElementById('ProductId').style.display='block';");
Select select32 = new Select(driver.findElement(By.id("ProductId")));
select32.selectByVisibleText("1020");
qrjkbowd

qrjkbowd1#

您不能使用类似于deselectAll()的任何操作。但是,您可以迭代每个选项并每次都选择。请尝试以下操作:

List<WebElement> liOp = new Select(driver.findElement(By.id("YourLocator"))).getOptions();
for(WebElement eachElem:liOp){
    new Select(driver.findElement(By.id("yourLocator"))).selectByVisibleText(eachElem.getText());
}

看看是否有帮助。对于Control + A,请尝试以下操作:

Actions builder = new Actions(driver);
builder.sendKeys(Keys.chord(Keys.CONTROL,"a")).perform();
f1tvaqid

f1tvaqid2#

我们把所有选项都放到一个网络元素列表中,然后我们可以遍历这个列表来选择所有选项。

Select select31 = new Select(driver.findElement(By.id("ProductId")));
select31.deselectAll();

List<WebElement> select31Options = select31.getOptions();

for (WebElement option : select31Options) {
    select31.selectByVisibleText(option.getText());
}

如果这对你有帮助就告诉我。

3bygqnnd

3bygqnnd3#

我建议尝试另一种解决方案,早些时候我也使用循环来选择下拉列表中的所有元素,但当它们的数量很大时,可能会花费很长时间。我尝试过,它的工作是:

element(By.id("dropdownId")).selectByIndex(0);
element(By.id("dropdownId")).sendKeys(Keys.SHIFT, Keys.END);

我知道这是一年前的事了,但它仍然可以帮助别人。

vhmi4jdf

vhmi4jdf4#

1.首先检查下拉菜单是否支持多选。
1.如果可以选择多个选项,请将选择的所有选项收集到一个列表中。
1.使用for循环迭代列表中的所有元素并选择它们。

Select selectElement = new Select(driver.findElement(By.Id("productId")));
if (selectElement.isMultiple()) {  /* step 1 */
    List<WebElement> options = selectElement.getOptions();  /* step 2 */
    for (WebElement we : options) {   /* step 3 */
        we.selectByVisibleText(we.getText());
    }
} else {
    // does not support multiple
}
ttp71kqs

ttp71kqs5#

driver.get("https://www.w3schools.com/tags/tryit.asp? 
filename=tryhtml_select_multiple");

driver.manage().window().maximize();

driver.switchTo().frame("iframeResult");

WebElement ele = driver.findElement(By.name("cars")); // Get control of select tag
Select select = new Select(ele);
List<WebElement> allOptions = select.getOptions();
ele.sendKeys(Keys.CONTROL); // to hold CTRL button once and then click on all options
for (WebElement webElement : allOptions) {
    webElement.click();
}
Thread.sleep(5000);
select.deselectAll(); // to deselect all values
xghobddn

xghobddn6#

for (WebElement webElement : options) {
        webElement.click();
        System.out.println(webElement.getText());
    }

在Enhanced for循环中,添加了webElement.click()。这将选择web元素。由于此循环没有任何条件,因此将选择所有值。

相关问题