selenium xpath表达式的语法错误

时间:2016-07-04 08:54:51

标签: java xml selenium xpath

我正在构建一个非常复杂的selenium <table id="list_proj" class="table tablebas table-striped table-bordered"> <thead> <tbody style="height:1em;overflow-y:scroll"></tbody> <tbody style="height:1em;overflow-y:scroll"></tbody> <tbody style="height:1em;overflow-y:scroll"> <tr class="caption"> <td class="app_name" style="background-color:#EFEFEF;" colspan="11"> <b> <a href="?page=applications&mode=edit&app_id=3" style="padding-left:10px;" data-icon=""> Application SEVo</a> </b> </td> </tr> <tr class="data"></tr> <tr class="data"></tr> <tr class="data"> <td title="Pas de commentaire !" style="text-align:left"> <img alt="MCO" src="/colibri/images/corner-dots.gif"></img> <a href="?page=projects&mode=view&project_id=9" style="padding-left:5px">MCO</a> </td> <td>0.50</td> <td></td> <td colspan="2"> </tr> <tr class="data"> </tbody> <tbody style="height:1em;overflow-y:scroll"></tbody> </table> 表达式,并且看起来存在语法错误。

我真的不懂XML语言,所以我明显犯了错误,有人能说出错误在哪里? :)

谢谢!

我在网页上有一个项目列表,每个项目都有子项目,我想要一个特定的项目,我知道driver.findElement( By.xpath( "((//a[contains(text(),'"+name+"')])[1] .(ancestor::td[@class='caption'])[1] .following-sibling::td[@class='data'] .descendant::(a[contains(text(),'"+subName+"')])[1])[1]" )); 和{{1}}。

html代码类似于:

{{1}}

我的xpath表达式:

{{1}}

对不起的混乱^^'

4 个答案:

答案 0 :(得分:0)

我不知道带有selenium的xPath,但我认为语法错误应该在下面的行中

.descendant::(a[contains(text(),'"+subName+"')])[1])[1]

应该是

.descendant::(//a[contains(text(),'"+subName+"')])[1])[1]

? (注意“// a”)

答案 1 :(得分:0)

应该是这样的:

//a[contains(text(),'"+name+"')]/ancestor::tr[@class='caption']/following-sibling::tr[@class='data']//a[contains(text(),'"+subName+"')]

每次都不要使用index [1],如果您确定只返回一个元素,则无需在每个后代或祖先调用中放置索引。

答案 2 :(得分:0)

使用xPath以下更好的方法: -

//a[contains(.,'"+name+"')]/ancestor::tr/following::a[contains(.,'"+subName+"')]

for eg. :- //a[contains(.,'Application SEVo')]/ancestor::tr/following::a[contains(.,'MCO')]

<强>更新..

另一个是: -

//a[contains(.,'"+name+"')]/following::a[contains(.,'"+subName+"')]

希望它会对你有所帮助.. :)

答案 3 :(得分:0)

"((//a[contains(text(),'"+name+"')])[1]
.(ancestor::td[@class='caption'])[1]
.following-sibling::td[@class='data']
.descendant::(a[contains(text(),'"+subName+"')])[1])[1]"

这有很多错误,很难知道从哪里开始。首先,我们不知道变量名称和子名称中的内容 - 如果这些字符串包含单引号,则可能发生任何事情(注入攻击)。其次,它似乎在使用“。”作为路径中的步骤之间的分隔符,它应该使用“/”。第三,像“descendant ::”这样的轴后面的内容必须是NodeTest,并排除括号表达式。

我认为你的方法存在一个真正的问题。用你不理解的语言写一个复杂的表达式然后询问语法错误意味着什么并不是一个很好的进步方式。 (一旦你摆脱了语法错误,你会知道XPath实际意味着什么吗?)。做一些阅读并正确学习语言;不参加驾驶课程,不要试驾车。