将指定XPath转换为Watir代码后无法运行,请求排查错误原因
问题分析与修正
对比你的XPath和Watir代码,核心错误有3处:
祖先节点找错了
原XPath用ancestor::table是找包含目标div的上层祖先table(比如div在table的单元格里,就定位这个table)。但你写的.preceding_sibling(tag_name: 'table')是找div的同级前置table,这俩逻辑完全不同,是最关键的错误,应该改成.ancestor(table)。链接的class写错了
原XPath里a标签的class是idit-grid-btn,但你写成了.link(class: "fa fa-#{var}")——这个class是i标签的属性,不是a的。a标签的筛选条件应该是class: 'idit-grid-btn'。层级跳转的前提错误
原XPath是找到祖先table后向上跳3级父节点(/../../..),但你前面定位的table本身就错了,所以后续的.parent.parent.parent即使写法正确也没用,先把table的定位修正,这部分才能生效。
修正后的Watir代码:
element = @browser .div(text: locator.strip) .ancestor(table) .parent .parent .parent .link(class: 'idit-grid-btn') .i(class: "fa fa-#{var}")
小补充:如果怕连续.parent写起来麻烦,也可以用.xpath("../../..")代替,和原XPath逻辑更一致:
element = @browser .div(text: locator.strip) .ancestor(table) .xpath("../../..") .link(class: 'idit-grid-btn') .i(class: "fa fa-#{var}")
内容的提问来源于stack exchange,提问作者Rajagopalan
相关产品推荐
相关产品推荐

