我正在尝试编写代码,为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代码。
答案 0 :(得分:4)
令人难以置信的糟糕的开发实践。我知道你没有能力改变它,但如果可以的话,请指出它非常糟糕。为什么?有两个原因。
在CSS中,基于类的规则通常以句点开头。
在CSS选择器框架中,包括jQuery / Sizzle以及Selenium在这个例子中所做的事情,这个时期具有特殊意义 - 主要是根据许多规则选择元素。这就是为什么它在这里绊倒的原因 - 如果你将CSS选择器直接运行到Chrome或Firebug中,你可以看到同样的事情 - 它也会失败。
在元素的ID中使用句点是违背所有这些的。令人讨厌的是,HTML规范允许这样做。
无论如何,一切都没有丢失,周围有很多方法。
首先,你可以逃脱它:
select#param\\.Status
其次,您可以使用稍微更精细的选择器:
select[id='param.Status']
最后,您可以使用XPath:
//select[@id='param.Status']