Hem*_*dar 15 java selenium xpath selenium-webdriver
在我们的应用程序中,几乎在每个屏幕中我们都有一个带有文本"New"的按钮,这是其中一个按钮的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>
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下语句单击按钮:
driver.findElement(By.xpath("//button[[@type, 'submit'] and [text()='New']]")).click();
Run Code Online (Sandbox Code Playgroud)
但这不起作用
org.openqa.selenium.InvalidSelectorException: The given selector //button[[@type= 'submit'] and [text()='New']] is either invalid or does not result in a WebElement.
Run Code Online (Sandbox Code Playgroud)
目前我使用以下代码点击按钮:
List<WebElement> allButt = driver.findElements(By.tagName("button"));
for (WebElement w : allButt)
{
if (w.getText().matches("New"))
{
w.click();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
因为我在页面中有近150个按钮.还有其他方法吗?
Ian*_*rts 30
您的xpath语法错误 - 您不需要内部方括号 - 但即使您修复此问题:
//button[@type, 'submit' and text()='New']
Run Code Online (Sandbox Code Playgroud)
它不会选择你想要的东西.问题是"新"不是直接包含在按钮元素中的文本,而是在子span元素内.如果不是text()你只是使用.那么你可以检查元素的整个字符串值(所有后代文本节点在任何级别的串联)
//button[@type='submit' and contains(., 'New')]
Run Code Online (Sandbox Code Playgroud)
或者检查span而不是text():
//button[@type='submit' and span='New']
Run Code Online (Sandbox Code Playgroud)
(提交包含值为"新"的跨度的按钮)
Ste*_*han 10
试试这个 xpath:
//button[@type='submit']/span[.='New']
Run Code Online (Sandbox Code Playgroud)
演示
http://www.xpathtester.com/xpath/ff393b48183ee3f373d4ca5f539bedf2
编辑
根据@Ian Roberts的评论,如果单击按钮元素很重要,您可以使用以下 xpath 表达式:
//button[@type='submit']/span[.='New']/..
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36449 次 |
| 最近记录: |