2017-07-25 1 views
2

のJava +セレンといくつかのテキストを取得するテキストのみを「xxxxxにするために送られた招待状」は、私が私が取得したいwebdriverを

<button class="action" data-ember-action="" data-ember-action-3995="3995"> 
      Visualizar perfil 
</button> 

私はテキストを取得しています内側に何を取得する必要はありません。この方法:

String pessoapopu = driver.findElement(By.className("artdeco-toast-message")).getText();     
System.out.println(pessoapopu); 

ページ構造:

<div class="artdeco-toast-inner" data-ember-action="" data-ember-action-3994="3994"> 
    <li-icon aria-hidden="true" type="success-pebble-icon" class="artdeco-toast-icon"><svg viewBox="0 0 24 24" width="24px" height="24px" x="0" y="0" preserveAspectRatio="xMinYMin meet" class="artdeco-icon"><g class="large-icon" style="fill: currentColor"> 
     <g id="success-pebble-icon"> 
      <g> 
      <circle class="circle" r="9.1" stroke="currentColor" stroke-width="1.8" cx="12" cy="12" fill="none" transform="rotate(-90 12 12)"></circle> 
      <path d="M15.667,8L17,9.042l-5.316,7.36c-0.297,0.395-0.739,0.594-1.184,0.599c-0.455,0.005-0.911-0.195-1.215-0.599l-2.441-3.456l1.416-1.028l2.227,3.167L15.667,8z" fill="currentColor"></path> 
      <rect style="fill:none;" width="24" height="24"></rect> 
      </g> 
     </g> 
     <g id="Layer_1"> 
     </g> 
     </g></svg></li-icon> 
    <p class="artdeco-toast-message"> 
       Invitation sent to xxxxx 
     <button class="action" data-ember-action="" data-ember-action-3995="3995"> 
      Visualizar perfil 
     </button> 

    </p> 
    </div> 

image

+0

待ちを探索することができます。 –

+0

@Paulo、あなたは出力として何を得ていますか?ボタンのテキストを含む完全なテキスト?または何かエラー? – NarendraR

+0

@Tuks ボタンの中に入っていても、私とは無関係のテキストです。 –

答えて

0

実際にはセレンのgettext()メソッドは、あまりにも、サブ要素内のすべてのテキストを取得し、そのMurthiによって推奨されるアプローチは、私の知る限り、最も適用されます。

String newLine = System.getProperty("line.separator"); 
String pessoapopu = driver.findElement(By.className("artdeco-toast-message")) 
          .getText().replaceAll(newLine, ""); 

それとものtry/より便利なHTMLコードを尋ねる: このアプローチを試してみてください。

+0

xpathだけを使ってこれを処理する方法はありますか? – NarendraR

+0

私は 'とnot()' xpathメソッドを考えていますが、それについてはわかりません。 –

+1

これはOPが尋ねたことをしません...なぜそれが答えとしてマークされているのか分かりません。 – JeffC

-1

次のコードを試すことができます。

WebElement text=driver.findElement(By.className("artdeco-toast-message")); 
String wholeText = text.getText(); 
String unWantedText=text.findElement(By.className("action")).getText(); 
String RequiredText=wholeText.replace(unWantedText,""); 
System.out.println(RequiredText); 
+0

"getText()メソッドはタイプによって定義されていません" –

+0

ブラケットを紛失して今更新されました。 – Murthi

+0

はそれはそれはコンソールでmesnagem 3倍され、部品で働いていた: 招待状は、それが次のパス なしなので要素を見つけることができません とマウロ・サントスに送らマウロ・サントス 招待状に送信されたマウロ・サントス 招待状に送信しました要素:{"メソッド": "クラス名"、 "セレクタ": "アクション"}要素を見つけることができません –

0

HTMLを指定すると、.getText()になり、改行でそのテキストを分割してから最初の分割を行い、必要なテキストを取得できます。

driver.findElement(By.cssSelector("p.artdeco-toast-message")).getText().split("\r\n")[0]; 
6

あなたはInvitation sent to xxxxxテキストを検索するために//p[@class='artdeco-toast-message']/text() XPathを使用することができますが、セレンは、テキストノードを見つけるために、XPathでtext()メソッドをサポートしていません。

どちらのあなたは、XPathのnot()機能を使って、ボタンのテキストを除外するために、XPathの下に使用して要素を検索してみた場合:セレンはこの

ことはできませんので

//p[@class='artdeco-toast-message']/node()[not(self::button)] 

再びそれがテキストノードを使用して要素を見つけますここで

すなわち、同じXPathを実行するために利用できる一つの解決策JavascriptExecutor

利用JavaScriptevaluate()方法及びを使用してXPathを評価します

JavascriptExecutor js = (JavascriptExecutor)driver; 
Object message = js.executeScript("var value = document.evaluate(\"//p[@class='artdeco-toast-message']/text()\",document, null, XPathResult.STRING_TYPE, null); return value.stringValue;"); 
System.out.println(message.toString().trim()); 

OR

JavascriptExecutor js = (JavascriptExecutor)driver; 
Object message = js.executeScript("var value = document.evaluate(\"//p[@class='artdeco-toast-message']/node()[not(self::button)]\",document, null, XPathResult.STRING_TYPE, null); return value.stringValue;"); 
System.out.println(message.toString().trim()); 

それはあなたの期待どおりの結果が得られます。すべてのデータを取得し、String関数を使用してフォーマットする必要はありません。

あなたは要素見えるようにして同じコードをしようとする...推測のために詳細にevaluate()from here

関連する問題