我必须从下拉列表中选择多个值[隐藏某些值,直到我向下滚动]。我可以选择多个选项,但我认为必须有更好的方法从下拉列表中选择多个值。
有没有人知道更好的方法来传递参数化的多个值部分并选择一次选项。请记住,有些时候我可能需要选择一个选项,有时候选择两个选项。
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();
}
}
答案 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;
}
}
}