【问题标题】:CssSelector cannot find element by Id (selenium webdriver C#)CssSelector 无法通过 Id 找到元素(selenium webdriver C#)
【发布时间】:2014-11-12 14:30:13
【问题描述】:

我使用简单的代码作为

 [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 浏览器 v. 37.0.2062.120

【问题讨论】:

  • 您是否尝试过使用# 符号作为id?例如,By.CssSelector("div#1")?
  • 是的,我也尝试过只使用 # 不带标签名称
  • @Mark Rowlands:请参阅我的回答,了解为什么这也不起作用。

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


【解决方案1】:

[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;

【讨论】:

  • 非常感谢!现在可以了!不幸的是,我不能投票赞成你的答案(
  • 没关系,现在您可以使用投票箭头下方的图标将其标记为正确答案。很高兴我能帮上忙!
  • @BoltClock 我之前没有遇到过这个特定问题,感谢您的澄清。
猜你喜欢
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
相关资源
最近更新 更多