从Selenium的下拉列表中选择一个选项时是否可以使用通配符?我正在开发一个webapp,我将文件上传到服务器。上传文件后,我可以通过从下拉列表中选择文件来执行操作。但是,下拉列表显示文件以及文件的大小,因此在查看选项时,它将显示“文件名 - 0.5 GB”。我不能使用selectByValue,因为value属性是随机分配的,我不能使用selectByIndex,因为选项的顺序可能会根据显示的文件数量而改变。
我能想出的最好的东西就是这样(Java代码):
Select sel = = new Select(dropdown);
List<WebElement> list = sel.getOptions();
for (WebElement option : list) {
if (option.getText().contains(data.getImageName())) {
sel.selectByVisibleText(option.getAttribute("value"));
break;
}
}
但是我想,当我没有显示的确切文本时,必须有更好的方法从下拉列表中选择一个选项。有吗?
答案 0 :(得分:1)
根据Select
class implementation,只有selectByVisibleText()
相关方法,但它relies on the full option text,而不是部分方法:
List<WebElement> options =
element.findElements(By.xpath(".//option[normalize-space(.) = " + escapeQuotes(text) + "]"));
如您所见,它在xpath表达式中使用=
匹配。
解决方案是找到一个选项&#34;手动&#34;使用xpath&#39; contains()
并致电setSelected()
:
Select sel = = new Select(dropdown);
WebElement option = driver.findElement(By.xpath('//path/to/select//option[contains(., "Partial text")]'));
sel.setSelected(option);
答案 1 :(得分:0)
Alecxe是对的,但不幸的是sel.setSelected(option)
方法是私有的。您可以在页面中找到option元素,然后按ID选择它:
WebElement option = driver.findElement(By.xpath("//option[contains(.,'" + containValue + "')]"));
Select sel = new Select(element);
sel.selectByIndex(sel.getOptions().indexOf(option));
答案 2 :(得分:-1)
要回答你的问题,听起来你要求模式匹配。这是Java Regular Expressions文档的链接。
也许你问的是错误的问题。你准备测试的是什么,即:你怎么知道你想要选择下拉列表中的哪个选项?