【问题标题】:best way to detect an element on a web page for seleniumRC in java在Java中检测网页上硒元素的最佳方法
【发布时间】:2011-07-15 21:23:48
【问题描述】:

使用 Java 使用 SeleniumRC 检测网页上的元素以进行自动化测试的最佳方法是什么?我知道有 XPath 元素和 CSS 元素,但是哪一个最好呢?

谢谢! 尼丁

【问题讨论】:

  • 没有用例这个问题只会得到主观答案。

标签: java selenium css-selectors


【解决方案1】:

X 路径确实是准确的。然而,它们也非常脆弱。对网站进行任何移动的更改都有可能破坏您的测试。到目前为止,ID 是最不脆弱的,因为无论您是否更改 a 都无关紧要,您的测试总能找到它。

【讨论】:

    【解决方案2】:

    在我看来,最准确的方法是 XPath,因为您可以使用 XPath 来描述元素在 DOM 中的确切位置,但是在某些情况下 CSS 定位器比 XPath 更有效。

    使用 selenium 的 ID 定位器是最简单的,但除非您要查找的元素有 ID,否则并不总是有用。

    使用 XPath 时最大的不利因素是 Selenium RC 和带有糟糕 JavaScript 渲染引擎的浏览器的性能(想想 IE6/IE7)。已经做了相当多的工作来尝试纠正这个问题,所以如果你使用格式良好的 XPath,它只搜索 DOM 的特定部分,这个问题应该是最小的。 Selenium webdriver 实现要快得多。

    总结是真的没有一个答案,这取决于你想从定位器中得到什么,以及你正在测试哪些浏览器。我个人在 99% 的实例中都使用 XPath。

    我个人几乎完全将 XPath 与偶尔的 CSS 定位器一起使用。

    【讨论】:

      【解决方案3】:

      查找元素的最佳和最快方法是通过 id。在许多浏览器中,通过 id 查找元素的时间是线性的,甚至是恒定的。非常快。

      例如,给定一个元素定义为:

      <input type="text" name="passwd" id="passwd-id" />
      

      你应该会发现它是这样的:

      selenium.type("passwd-id", "test");
      

      或者,如果您使用的是 webdriver API:

      element = driver.findElement(By.id("passwd-id"));
      

      如果您页面上的元素没有 ID,请添加它们!或要求开发者添加它们!

      查找元素的下一个最佳方法是按名称。这也很快,特别是如果页面上的名称是唯一的。

      例如:

      selenium.type("passwd", "test");
      

      或者,如果您使用的是 webdriver API:

      element = driver.findElement(By.name("passwd"));
      

      第三种查找元素的方法是使用 CSS 选择器。现代浏览器非常擅长以这种方式定位元素。

      定位元素最糟糕的方法是使用 xpath。 xpath 又慢又脆弱,难以阅读。

      Selenium 的主要贡献者 Simon Stewart 在这里回答了这个问题: http://www.youtube.com/watch?v=oX-0Mt5zju0&feature=related 查找时间戳 39:00

      这里也有很好的信息: http://seleniumhq.org/docs/02_selenium_ide.html#locating-elements

      【讨论】:

        【解决方案4】:

        Xpath 是我使用的方式。如果您的节点具有唯一的 ID,这将有所帮助。

        【讨论】:

          【解决方案5】:

          CSS 选择器更快,但并不总是可用;您始终可以依赖 XPath,但可能会影响性能。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-12-31
            • 2012-03-21
            • 2013-01-09
            • 2010-09-13
            • 2020-11-06
            • 1970-01-01
            相关资源
            最近更新 更多