在我们的应用程序中,几乎在每个屏幕上都有一个带有文本“新建”的按钮,这是其中一个按钮的 html 源代码:
<button id="defaultOverviewTable:j_id54" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only ui-state-hover" type="submit" name="defaultOverviewTable:j_id54" role="button" aria-disabled="false">
<span class="ui-button-text ui-c">New</span>
</button>
我尝试使用以下语句点击按钮:
driver.findElement(By.xpath("//button[[@type, 'submit'] and [text()='New']]")).click();
但这不起作用
org.openqa.selenium.InvalidSelectorException: The given selector //button[[@type= 'submit'] and [text()='New']] is either invalid or does not result in a WebElement.
目前我正在使用下面的代码来点击按钮:
List<WebElement> allButt = driver.findElements(By.tagName("button"));
for (WebElement w : allButt)
{
if (w.getText().matches("New"))
{
w.click();
break;
}
}
因为我在页面中有近 150 个按钮。还有别的办法吗?
原文由 HemaSundar 发布,翻译遵循 CC BY-SA 4.0 许可协议
您的 xpath 语法错误 - 您不需要内部方括号组 - 但即使您修复了此问题:
它不会选择你想要的。问题是“New”不是直接包含在按钮元素中的文本,而是在子 span 元素中。如果不是
text()
你只是使用.
然后你可以检查元素的整个字符串值(所有后代文本节点在任何级别的串联)或者检查
span
而不是text()
:(提交包含值为“新建”的跨度的按钮)