【问题标题】:Selenium WebDriver IE performanceSelenium WebDriver IE 性能
【发布时间】:2015-03-27 16:53:38
【问题描述】:
_driver.FindElement(By.CssSelector("[id='3_NewSiteMaintenanceButton']"));

=15.0s


_driver.FindElement(By.CssSelector("[id$='NewSiteMaintenanceButton']"));

=18.4s


_driver.FindElement(By.CssSelector("#3_NewSiteMaintenanceButton"));

NoSuchElementException : 无法使用 css 选择器 == #3_NewSiteMaintenanceButton 找到元素


_driver.FindElement(By.Id("3_NewSiteMaintenanceButton"));

=12.58s


Chrome 和 FireFox 分别在 4 和 6 秒 内完成整个测试,而 IE 需要 12-18 秒 才能找到单个 DOM 元素。为什么 IE 这么慢,如何提高性能?

【问题讨论】:

  • 使用_driver.FindElement(By.Id(...))怎么样?对于 ID 匹配,我认为应该是最有效的?
  • 如果您使用 ID 匹配,则不需要 # 前缀。 _driver.FindElement(By.Id("3_NewSiteMaintenanceButton"));。正如@BoltClock 提到的那样,这仍然提出了关于ID 有效性的问题。
  • @shri046 这行得通!但是,是的,身份证无效
  • 很高兴知道!您能否用 ID 查找的时间更新您的帖子?仅作为历史参考,作为验证将是一个不错的选择。
  • @shri046 好的,我添加了。需要12秒才能找到有ID的元素,为什么要这么久??

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


【解决方案1】:

ID 选择器不能以数字开头,因为a CSS identifier cannot begin with a digit。如果您没有在属性选择器中引用该值,它们都会因为相同的原因而失败(尽管奇怪的是它会导致 NoSuchElementException 而不是其他东西,因为从技术上讲,选择器是无效的)。

要使用 ID 选择器,您需要转义初始数字。如果数字来自变量,您仍然可以单独对其进行转义,只需将转义放在哈希之后即可:

_driver.FindElement(By.CssSelector("#\\" + prefex + "_NewSiteMaintenanceButton"));

【讨论】:

  • @James Madison:更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 2018-05-20
  • 2019-01-06
  • 1970-01-01
  • 2016-01-04
  • 2015-02-28
  • 2014-10-31
  • 2017-09-17
  • 2015-10-20
相关资源
最近更新 更多