我正在尝试编写代码来选择 HTML 下拉菜单的所有选项。我编写了以下代码,我相信它应该有效。
public void testSelectMultipleOptions () {
// code to get to report page
selectAllOptions("param.Status");
// code to run report and switch to the result page
}
public void selectAllOptions(String htmlID) {
List<WebElement> options = selenium.findElements(By.cssSelector("select#"+htmlID+" > option"));
for(WebElement option: options) {
option.click();
}
}
当我运行此代码时,下拉列表中没有选择任何选项。我相信我遇到的问题是由以下事实引起的:我有一个 id 中带有句点的 HTML 元素,但我无法更改该页面的底层 HTML 代码。
最佳答案
存在极其糟糕的开发实践。我知道你没有能力改变它,但如果你可以,请指出它非常非常糟糕。为什么?有两个原因。
在 CSS 中,基于类的规则通常以句点开头。
在 CSS 选择器框架中,包括 jQuery/Sizzle 以及 Selenium 在本例中所做的事情,句点具有特殊含义 - 主要是根据许多规则选择元素。这就是为什么它会在这里绊倒 - 如果你直接在 Chrome 或 Firebug 中运行 CSS 选择器,你会看到同样的事情 - 它也会摔倒。
在元素的 ID 中使用句点与这一切背道而驰。令人烦恼的是 HTML 规范允许这样做。
无论如何,一切都还没有结束,有很多方法可以解决它。
首先,你可以逃避它:
select#param\\.Status
其次,您可以使用稍微更复杂的选择器:
select[id='param.Status']
最后,您可以使用 XPath:
//select[@id='param.Status']
关于selenium - 如何选择 selenium 中 id 中有句点的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16107448/