首页 > 解决方案 > 按类和名称查找 Web 元素(按钮)

问题描述

我对 Selenium 很陌生。

我试图找到按钮验证(见下文)而不是使用 xpath。

<div class="order">
<a style="float: left;" href="#143207" class="VoidDoc ui-button ui-corner-all ui-widget" role="button"> Void </a>
<a style="float: left;" href="validatedocumentation.php?documentId=143207&amp;origin=viewreferral.php&amp;OrderId=836829" class="ui-button ui-corner-all ui-widget" role="button"> Validate </a>
<a class="signDocBehalf ui-button ui-corner-all ui-widget" style="float: left;" href="#143207#20263#836829" role="button">Sign</a>
<a style="float: left;" href="editdocumentation.php?documentId=143207&amp;origin=viewreferral.php" class="ui-button ui-corner-all ui-widget" role="button"> Edit </a>
</div>

我试图通过类名(不幸的是不是唯一的)和按钮的文本(“验证”)来查看:

.....Driver.findElement(By.xpath("//a[@class='ui-button ui-corner-all ui-widget' and text()='Validate']")).click();

我也试过

.....Driver.findElement(By.xpath("//div[@class='ui-button ui-corner-all ui-widget' and text()='Validate']")).click();

收到错误:

no such element: Unable to locate element: {"method":"xpath","selector":"//div[@class='ui-button ui-corner-all ui-widget' and text()='Validate']"}
  (Session info: chrome=94.0.4606.81)

我猜是因为"<a>" is nested in "<div>",如果我错了,请纠正我。

如何识别这个按钮是正确的。

请给我你的好建议。

标签: javaselenium-webdriver

解决方案


你几乎是正确的。

您正在使用的 xpath

//a[@class='ui-button ui-corner-all ui-widget' and text()='Validate']

部分正确。文本 Validate有尾随空格,因此您必须使用contains

使用这个 xpath :

//a[@class='ui-button ui-corner-all ui-widget' and contains(text(),'Validate')]

PS:如果我们有唯一的条目,请检查dev tools(谷歌浏览器)。HTML DOM

检查步骤:

Press F12 in Chrome-> 转到element部分 -> 执行CTRL + F-> 然后粘贴xpath并查看,如果您想要element的是否使用匹配节点突出显示。1/1

既然你提到你不想使用 xpath,但不知道为什么?

如果是这种情况,请像这样使用 css 选择器:

a.ui-button.ui-corner-all.ui-widget[role='button'][href^='validatedocumentation.php?']

推荐阅读