web-dev-qa-db-ja.com

テキストが「新規」のボタンのXpath

ほとんどすべての画面のアプリケーションには、「New」というテキストのボタンがあります。ボタンの1つの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個のボタンがあります。他の方法はありますか?

14
HemaSundar

Xpath構文が間違っています-角括弧の内部セットは必要ありません-しかし、これを修正しても:

_//button[@type, 'submit' and text()='New']
_

希望するものは選択されません。問題は、「新規」がボタン要素に直接含まれるテキストではなく、子スパン要素内にあることです。 text()の代わりに_._を使用する場合は、要素の文字列値全体(あらゆるレベルのすべての子孫テキストノードの連結)を確認できます。

_//button[@type='submit' and contains(., 'New')]
_

または、text()の代わりにspanを確認します。

_//button[@type='submit' and span='New']
_

(値が「新規」のスパンを含む送信ボタン)

27
Ian Roberts

代わりにこのxpathを試してください。

//button[@type='submit']/span[.='New']

デモ

http://www.xpathtester.com/xpath/ff393b48183ee3f373d4ca5f539bedf2


[〜#〜] edit [〜#〜]

@ Ian Roberts のコメントに従って、ボタン要素のクリックが重要な場合は、代わりに次のxpath式を使用できます。

//button[@type='submit']/span[.='New']/..
3
Stephan

上記の問題に対する非常に簡単な解決策は、オプションcontains(text()、 '')でspanを使用することです。

次のxpathコードを使用できます

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

2
Sharfi