CssSelector无法通过Id找到元素(selenium webdriver C#)

时间:2014-09-18 09:50:44

标签: c# selenium selenium-webdriver webdriver css-selectors

我使用简单的代码

 [FindsBy(How = How.CssSelector, Using = "div[id=1]")]
 private IWebElement _plasticOption;

找到id = 1的元素。

对于页面工厂而言,如果有人不知道它是什么,我们可以将上面的代码更改为下一个:

 IWebElement element = driver.FindElement(By.CssSelector("div[id=1]"));

因此,这个简单的代码无法在下一段HTML中找到一个元素:

<div class="b-wide-option disabled" data-bind="css: { selected: IsSelected, disabled: !IsVisible() }, click: Select, attr: { id: Id }" id="1"> </div>

但我可以通过下一个方式找到这个元素:

 [FindsBy(How = How.Id, Using = "1")]
 private IWebElement _plasticOption;

我实际上想知道为什么我无法使用CssSelector找到这个元素。

我有:

selenium webdriver v.2.43.1

chromedriver v.2.10

Chrome Brovser v.37.0.2062.120

1 个答案:

答案 0 :(得分:3)

[id=1]不是有效的属性选择器。当属性值不加引号时,它被视为CSS标识符,a CSS identifier cannot start with a digit。出于同样的原因,像div#1这样的选择器将不起作用。

如果您需要查找以数字开头的属性值,则需要引用值:

[FindsBy(How = How.CssSelector, Using = "div[id='1']")]
private IWebElement _plasticOption;

如果您更喜欢使用ID选择器,则需要转义数字(您也可以在属性选择器中执行此操作,但您最好只引用该值):

[FindsBy(How = How.CssSelector, Using = "div#\\1")]
private IWebElement _plasticOption;