JavaScud | Forum | JIRA | Blog |
  Dashboard > Selenium 中文 > ... > Selenium Core - Wiki > Help With XPath
  Selenium 中文 Log In View a printable version of the current page.  
  Help With XPath
Added by Tin Steeler, last edited by Nicholas Ding on Nov 15, 2006  (view change)
Labels: 
(None)

如果你想使用 Selenium 在你的页面中寻找一个元素,通常你可以使用 id= 或者 name=。然而,如果你的测试用例很复杂,学习使用 XPath 就是不可避免的了。使用 XPath,你可以用像"id=main 的 table 下面的第一个 div"或者"form中class=login的提交按钮"等方式表达你所需要搜索的元素位置。注意:我不是一个 XPath 专家,仅仅是为了让 Selenium 可以进行跨平台的测试...

资源

W3C 上的 XPath 1.0 规范 (如果你想了解一些基本的查询语句 SS 2.5 就是一个很好的起点)
W3Schools XPath 指南
Selenium 参考手册 (例子里到处是)
XPather Firefox 扩展
XPath Check 扩展 (simpler, but less powerful)
Zvon 上的 XPath 指南 (非常不错,具有一个交互式的 XLab 工具可以让你试验)

在 Selenium 中使用 XPath

资源中的大多数教程都是重点都是在如何把 XPath 作为一个通用的 XML 处理工具来使用的 - 幸运的是在 [X]HTML 上使用 XPath 大大限制了它的范围。

我如何定位一个元素?

  1. 使用上面提到的某个 Firefox 扩展并且在元素上点击右键,把结果粘贴到你的脚本的第二个参数。缺点: 这样得到的路径比较脆弱 (一个完整的路径就像这样 /html/body/div[1]/div[5]/div/table/tbody/tr/td/p/a[3] 如果任何一个元素被加到了第三个 a 之前那么这个路径就被破坏了,并且不同的浏览器也可能会把类似 tbody 这样的元素插入到不同的位置)
  2. 尝试在你的代码中包含 id
  3. 如果你不能得到 id,尝试选择一个对于页面来说唯一的 class ('contentheading' etc) 并且从这里开始: //div[@class='contentheading']/span[1]

Gotchas

  1. 设置 selectors [1] [2] 等从 1 开始计数,而不是 0
  2. 如果你在一个元素里面使用多个 class 譬如 <div class="foo bar">) 你可以使用 //div[contains(@class, "foo")] 来寻找匹配的元素。
  3. 不要忘了 id 不能有数字开头。
  4. 不要忘了 <a> 元素有 name 而不是 id。

为什么这些 @#$%! XPath 在 IE6 下不能工作?!Why wont this @#$%! XPath work in IE6?!

  1. 某些原因导致 XPath 表达式 id('foo')/span 在 IE6 下无法工作。尝试使用 //div[@id='foo']/span 替代它。
  2. //div[5][@class="foo"] (在 document 中选择 class 为 foo 的第五个 div) 在 IE6 下不工作。尝试使用 /descendant::div[@class="foo"][5] 替代它。

上面资源列表中的 "Selenium 参考手册" (例子里到处是) 的超连接出现了异常,无法操作

Posted by Anonymous at Jun 02, 2008 16:10 | Reply To This
Site running on a free Atlassian Confluence Open Source Project License granted to WebWork China. Evaluate Confluence today.
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5.3 Build:#808 May 29, 2007) - Bug/feature request - Contact Administrators