selenium - 如何选择 selenium 中 id 中有句点的元素?

标签 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 代码。

最佳答案

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

在 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/

相关文章:

java - 断言 true,来自两种方法的变量

jquery - 使用 jQuery 拖动包含 div 的选择子项时拖动包含 div

css - 如何在 ul 标签中使用 nth-of-type 设置样式?

css - 是否有 CSS 父级选择器?

groovy - Geb 手册上的第一个示例未执行

selenium - 网站测试和端到端测试之间的区别

java - 如何将 Garcia 的 WebDriverManager 与 Spring 的 Request 结合使用?

java - 检测 webdriver 中是否选中单选按钮

python - 为什么程序总是打开http ://--port=57883/using IEDriverServer IE through Selenium Python

java - Selenium 网络驱动程序 : Java: NoSuchElementException: Unable to locate element: {"method" :"xpath" ,"selector" :"//div[@id=' manage_area']/ul/li/div[2]"}