XPath与IE和Firefox不同.为什么?

May*_*aya 4 firebug selenium xpath bookmarklet

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

//*[@id="Search_Fields_profile_docno_input"]
Run Code Online (Sandbox Code Playgroud)

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

//INPUT[@id='Search_Fields_profile_docno_input']
Run Code Online (Sandbox Code Playgroud)

请注意,第一个没有INPUT而是有一个星号(*).为什么我会得到不同的XPath表达式?我用于测试的哪一个是否重要:

Selenium.Click(//*[@id="Search_Fields_profile_docno_input"]);
Run Code Online (Sandbox Code Playgroud)

要么

Selenium.Click(//INPUT[@id='Search_Fields_profile_docno_input']);
Run Code Online (Sandbox Code Playgroud)

A.J*_*A.J 5

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

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

  • Re#2:永远不应该有一个具有给定ID值的元素.如果存在(即无效的HTML),Selenium会选择文档中的第一个. (2认同)