Selenium中关于XPath中节点后面[1]的诡异问题?

本人在用一个叫Selenium的开源工具,其中涉及XPath,有时一个XPath会查出多个结果,这时就在想一个办法解决,例如://a[contains(@id,'abc'... 本人在用一个叫Selenium的开源工具,其中涉及XPath,有时一个XPath会查出多个结果,这时就在想一个办法解决,例如://a[contains(@id,'abc')]这样的一个XPath,可能页面中有多个元素id中都包含abc,所以会出现很多,然后想了个办法就是//a[contains(@id,'abc')]后面加[1] [2] [3]这样遍历一下,但不知道为何,总会出现很奇怪的现象,比如//a[contains(@id,'abc')][2]找不到,或者有些元素被跳过,有高手碰到过类似的问题么,有什么办法可以解决一下么?
谢谢大家,问题解决了,在前面加了一个descendant,例如: //descendant::a[contains(@id,'abc')][2]这样就不会出现之前的问题了~~~
展开
 我来答
fennng
2010-11-19 · TA获得超过1637个赞
知道大有可为答主
回答量:1892
采纳率:90%
帮助的人:1140万
展开全部
//a[contains(@id,'abc')][2]

这个2代表你要找到 A 在家中排行老二. 而不是所有家庭合起来的第二个.

比如说
<span><a>老大</a><a>老二</a></span>
<span><a>老大</a><a>老二</a></span>

用 //span/a[2]

会把两个老二都找出来.

如果是这样的

<span><a>老大</a></span>
<span><a>老大</a></span>
<span><a>老大</a></span>
<span><a>老大</a></span>
<span><a>老大</a></span>

用这个xpath 就会找不到东西, 因为都是独生子女.

你要选中第二个老大, xpath 要这样写

(//span/a)[2]

这个方式在很多地方有效, 但在Selenium 中好像无效.
百度网友e6e3687
推荐于2016-11-01 · 超过14用户采纳过TA的回答
知道答主
回答量:51
采纳率:0%
帮助的人:34.7万
展开全部
selenium中 xpath 我一般这样用 xpath="//*/a[@id='xxx' and @class='xxx']"
要是在一个节点下有多个相同的div,就用div[1][2][3],要是只有一个就用上面那种形式比较好,或者使用firefox中的插件xpath checker 也可以查出来
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yahaveatarget
2010-11-18
知道答主
回答量:3
采纳率:0%
帮助的人:4941
展开全部
我没有办法重现这个错误~ 我创建了两个textbox
<asp:textbox runat="server" id='abc'>abc</asp:textbox>
<asp:textbox runat="server" id='abcd'>abcd</asp:textbox>

然后我用selenium ide 来测试 //*[contains(@id,'abc')] 的内容就会是 abc 而不包括abcd 我感觉他的contain实际上是matches

参考资料: selenium api

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夜来雨早来晴
2015-11-07 · TA获得超过3.1万个赞
知道大有可为答主
回答量:9110
采纳率:60%
帮助的人:809万
展开全部
XPath 简介
XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。
什么是 XPath?
XPath 使用路径表达式在 XML 文档中进行导航
XPath 包含一个标准函数库
XPath 是 XSLT 中的主要元素
XPath 是一个 W3C 标准
XPath 路径表达式
XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。
XPath 标准函数
XPath 含有超过 100 个内建的函数。这些函数用于字符串值、数值,日期和时间比较、节点和 QName 处理、序列处理、逻辑值等等。
XPath 在 XSLT 中使用
XPath 是 XSLT 标准中的主要元素。如果没有 XPath 方面的知识,您就无法创建 XSLT 文档。
XQuery 和 XPointer 均构建于 XPath 表达式之上。XQuery 1.0 和 XPath 2.0 共享相同的数据模型,并支持相同的函数和运算符。
您可以在我们的《XQuery 教程》中阅读更多有关 XQuery 的知识。
XPath 是 W3C 标准
XPath 于 1999年11月16日 成为 W3C 标准。
XPath 被设计供 XSLT、XPointer 以及其他 XML 解析软件使用。
XPath 节点
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或成为根节点)。
XPath 术语
节点(Node)
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。
[编辑本段]XPath存取函数
名称 说明
fn:node-name(node) 返回参数节点的节点名称。
fn:nilled(node) 返回是否拒绝参数节点的布尔值。
fn:data(item.item,...) 接受项目序列,并返回原子值序列。
fn:base-uri()
fn:base-uri(node)
返回当前节点或指定节点的 base-uri 属性的值。
fn:document-uri(node) 返回指定节点的 document-uri 属性的值。
selenium用XPath技术来记录网页元素的位置和属性.就是这么简单。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式