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

时间:2015-05-11 08:45:25

标签: selenium css-selectors webdriver

给定网页上具有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的元素?

1 个答案:

答案 0 :(得分:3)

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

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

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