目前正在使用 Selenium WebDriver 并使用 Java 。如果我有名为产品 ..
在那个下拉中我有很多值(例如: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");
答案 0 :(得分:0)
您不能使用与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();
答案 1 :(得分:0)
我们将所有选项都列入了一系列元素。然后我们可以遍历此列表以选择所有选项。
Select select31 = new Select(driver.findElement(By.id("ProductId")));
select31.deselectAll();
List<WebElement> select31Options = select31.getOptions();
for (WebElement option : select31Options) {
select31.selectByVisibleText(option.getText());
}
如果这有助于您,请告诉我。
答案 2 :(得分:0)
我建议尝试另一种解决方案,早些时候我也使用循环来选择下拉列表中的所有元素,但是当它们的数量很大时,它可能需要很长时间。我尝试过它的工作原理是:
element(By.id("dropdownId")).selectByIndex(0);
element(By.id("dropdownId")).sendKeys(Keys.SHIFT, Keys.END);
我知道这是在一年前,但它仍然可以帮助某人。
答案 3 :(得分:0)
使用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
}
答案 4 :(得分:0)
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