【问题标题】:XPath different in IE and Firefox. Why?XPath 在 IE 和 Firefox 中不同。为什么?
【发布时间】:2012-09-02 08:44:39
【问题描述】:

我使用 Firebug 的 Inspect Element 来捕获网页中的 XPath,它给了我类似的东西:

//*[@id="Search_Fields_profile_docno_input"]

我在 IE 中使用 Bookmarklets 技术来捕获同一对象的 XPath,我得到了类似的东西:

//INPUT[@id='Search_Fields_profile_docno_input']

注意,第一个没有 INPUT,而是有一个星号 (*)。为什么我得到不同的 XPath 表达式?我在测试中使用哪一个是否重要,例如:

Selenium.Click(//*[@id="Search_Fields_profile_docno_input"]);

Selenium.Click(//INPUT[@id='Search_Fields_profile_docno_input']);

【问题讨论】:

    标签: xpath selenium firebug bookmarklet


    【解决方案1】:

    *[Id=] 表示它可以是任何元素,而第二个明确提到 selenium 仅查找 ID 为 Search_Fields_profile_docno_input 的 INPUT 字段。由于以下原因,第二个 xpath 更好

    1. 查找使用 * 的元素需要更多时间,因为所有元素的 ID 都应匹配。
    2. 如果您的 HTML 代码没有“写得很好”,则可能存在具有相同 id 的其他元素,这可能会导致您的测试失败。

    【讨论】:

    • Re #2:给定 ID 值的元素不应该超过一个。如果存在(即无效的 HTML),Selenium 会选择文档中的第一个。
    • 我建议切换到 CSS 定位器而不是 XPATH,因为 XPATH 在 IE 版本 6 和 7 中速度较慢
    【解决方案2】:

    第一个匹配任何具有匹配 ID 的元素,而第二个将匹配限制为 <input> 元素。如果这些是 CSS 表达式,那将是 #Search_Fields_profile_docno_inputinput#Search_Fields_profile_docno_input 之间的区别。

    假设您只在网页中使用此 ID 一次,这两个 XPath 实际上是等效的。它们都将匹配 <input id="Search_Fields_profile_docno_input"> 元素,而没有其他元素。

    【讨论】:

      【解决方案3】:

      对于您的“为什么?”有一些很好的答案。问题在这里,但对于 Selenium 的使用,还有一个更好的选择。由于您的页面元素具有 ID 属性,因此请使用 Selenium 的 ID 定位器而不是 XPath 或 CSS:

      Selenium.Click("id=Search_Fields_profile_docno_input");
      

      这将直接进入元素,并且比任何其他定位器运行得更快。注意语法是id=value,而不是id="value"

      【讨论】:

        【解决方案4】:

        给定文档中的任何元素,都有无数个 XPath 表达式可以唯一地选择它。因此,两种不同的产品生成两条不同的路径是完全合理的。

        【讨论】:

          【解决方案5】:

          Google 刚刚发布了 Wicked Good XPath - 对 Cybozu Lab 著名的 JavaScript-XPath 的重写。链接:https://code.google.com/p/wicked-good-xpath/ 重写后的版本比原来的实现小了 40%,快了大约 %30。

          您可以检查一下并替换 Selenium 中使用的那个。

          【讨论】:

            猜你喜欢
            • 2017-03-02
            • 1970-01-01
            • 2010-11-22
            • 2010-10-03
            • 1970-01-01
            • 1970-01-01
            • 2011-01-18
            • 2019-06-08
            • 1970-01-01
            相关资源
            最近更新 更多