Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按钮的Xpath,文本为';新';_Java_Selenium_Xpath_Selenium Webdriver - Fatal编程技术网

Java 按钮的Xpath,文本为';新';

Java 按钮的Xpath,文本为';新';,java,selenium,xpath,selenium-webdriver,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="butt

在我们的应用程序中,几乎每个屏幕上都有一个带有文本“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>
driver.findElement(By.xpath("//button[[@type, 'submit'] and [text()='New']]")).click();
List<WebElement> allButt = driver.findElements(By.tagName("button"));
for (WebElement w : allButt)
{
    if (w.getText().matches("New"))
    {
        w.click();
        break;
    }
}
但这不起作用

org.openqa.selenium.InvalidSelectorException: The given selector //button[[@type= 'submit'] and [text()='New']] is either invalid or does not result in a WebElement.
目前,我正在使用以下代码单击按钮:

<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();
List<WebElement> allButt = driver.findElements(By.tagName("button"));
for (WebElement w : allButt)
{
    if (w.getText().matches("New"))
    {
        w.click();
        break;
    }
}
List allButt=driver.findElements(按.tagName(“按钮”);
for(WebElement w:allButt)
{
如果(w.getText().matches(“New”))
{
w、 单击();
打破
}
}

因为我在页面上有将近150个按钮。还有其他方法吗?

试试这个xpath:

//按钮[@type='submit']/span[.='New']
演示


编辑

根据中的注释,如果单击按钮元素很重要,则可以使用以下xpath表达式:

//按钮[@type='submit']/span[.='New']/。。

您的xpath语法错误-您不需要内部的方括号集-但即使您解决了这个问题:

//按钮[@键入'submit'和text()='New']
它不会选择您希望它选择的内容。问题是“New”不是直接包含在button元素中的文本,而是在子span元素中。如果只使用
而不是
text()
,则可以检查元素的整个字符串值(在任何级别上连接所有后代文本节点)

//按钮[@type='submit'并包含(,'New')]
或者选择
span
而不是
text()

//按钮[@type='submit'和span='New']

(提交按钮包含一个span,其值为“New”)

上述问题的非常简单的解决方案是使用span和选项contains(text(),“”)

您可以使用以下xpath代码


//span[contains(text(),'New')]

谢谢您的回答。从技术上讲,这将导致单击
span
而不是
按钮,但事件将冒泡,因此将产生所需的效果。@IanRoberts Thks,请发表评论;)