3

我正在尝试编写代码来选择 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 代码。

4

1 回答 1

5

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

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

在 CSS 选择器框架中,包括 jQuery/Sizzle 和 Selenium 在这个例子中所做的事情,句号有一个特殊的含义——主要是根据许多规则来选择元素。这就是它在这里跳闸的原因——如果你将 CSS 选择器直接运行到 Chrome 或 Firebug 中,你会看到同样的事情——它也会摔倒。

在 ID 中为元素使用句点与这一切背道而驰。令人讨厌的是,HTML 规范允许这样做。

无论如何,一切都不会丢失,有很多方法可以解决它。

首先,你可以逃避它:

select#param\\.Status

其次,您可以使用稍微复杂的选择器:

select[id='param.Status']

最后,您可以使用 XPath:

//select[@id='param.Status']
于 2013-04-19T15:07:14.293 回答