Selenium - 使用通配符从下拉列表中选择一个选项?

时间:2014-10-03 17:47:00

标签: java selenium drop-down-menu selenium-webdriver

从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;
        }
}

但是我想,当我没有显示的确切文本时,必须有更好的方法从下拉列表中选择一个选项。有吗?

3 个答案:

答案 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文档的链接。

也许你问的是错误的问题。你准备测试的是什么,即:你怎么知道你想要选择下拉列表中的哪个选项?