为什么我不能使用使用“#”符号的标准 CSS 注释来使用 @FindBy 注释在 Selenium Webdriver 上获取具有 ID 的元素?

Why can't I use the standard CSS annotation using the '#' symbol to grab elements with IDs on Selenium Webdriver, using the @FindBy annotation?

给定网页上的一个元素,其 ID 为:

id="j_idt74:addNewTypeBtn"

我正在使用'@findBy'注释方式抓取网页元素。

使用:

@FindBy(how=How.CSS, using="input#j_idt74:addNewTypeBtn")
WebElement mAddButton;

报错: '给定的选择器输入#j_idt74:addNewTypeBtn 无效或未生成 WebElement。发生以下错误: InvalidSelectorError: 指定了无效或非法的选择器'

但是如果我用ID作为属性表示法,比如:

@FindBy(how=How.CSS, using="input[id=\"j_idt74:addNewTypeBtn\"]")
WebElement mAddButton;

正常工作

为什么我不能使用使用“#”符号的标准 CSS 符号来抓取带 ID 的元素?

您的 ID 包含一个冒号,它是 CSS 选择器中的一个特殊字符(用于表示伪 class 或伪元素)。因此,选择器被视为 input#j_idt74:addNewTypeBtn,这当然是不正确的。

您可以使用 ID 选择器,但您需要像这样转义冒号:

@FindBy(how=How.CSS, using="input#j_idt74\:addNewTypeBtn")
WebElement mAddButton;