如何在selenium中选择id为句点的元素?

时间:2013-04-19 14:52:17

标签: selenium webdriver css-selectors selenium-webdriver

我正在尝试编写代码,为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代码。

1 个答案:

答案 0 :(得分:4)

令人难以置信的糟糕的开发实践。我知道你没有能力改变它,但如果可以的话,请指出它非常糟糕。为什么?有两个原因。

在CSS中,基于类的规则通常以句点开头。

在CSS选择器框架中,包括jQuery / Sizzle以及Selenium在这个例子中所做的事情,这个时期具有特殊意义 - 主要是根据许多规则选择元素。这就是为什么它在这里绊倒的原因 - 如果你将CSS选择器直接运行到Chrome或Firebug中,你可以看到同样的事情 - 它也会失败。

在元素的ID中使用句点是违背所有这些的。令人讨厌的是,HTML规范允许这样做。

无论如何,一切都没有丢失,周围有很多方法。

首先,你可以逃脱它:

select#param\\.Status

其次,您可以使用稍微更精细的选择器:

select[id='param.Status']

最后,您可以使用XPath:

//select[@id='param.Status']