Eso*_*nse 3 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();
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,下拉列表中没有选择任何选项。我相信我遇到的问题是由于我有一个 HTML 元素在 id 中带有句点,但我无法更改页面的底层 HTML 代码。
有非常糟糕的开发实践。我知道你没有能力改变它,但如果你能,指出它非常非常糟糕。为什么?两个原因。
在 CSS 中,基于类的规则通常以句点开头。
在 CSS 选择器框架中,包括 jQuery/Sizzle 和 Selenium 在这个例子中所做的,句号有一个特殊的含义——主要是根据很多规则来选择元素。这就是它在这里绊倒的原因——如果你直接在 Chrome 或 Firebug 中运行 CSS 选择器,你会看到同样的事情——它也会失败。
在元素的 ID 中使用句点与这一切背道而驰。令人讨厌的是,HTML 规范允许这样做。
无论如何,一切都没有丢失,有很多方法可以解决。
首先,你可以逃避它:
select#param\\.Status
Run Code Online (Sandbox Code Playgroud)
其次,您可以使用稍微复杂一点的选择器:
select[id='param.Status']
Run Code Online (Sandbox Code Playgroud)
最后,您可以使用 XPath:
//select[@id='param.Status']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2892 次 |
| 最近记录: |