2017-05-29 9 views
-1

子孫がテキストを含まない現在のWebElementのテキストを取得する良い方法はありますか?私は11:22:08を抽出したい子孫のないセレンgetText

<div class="bottom"> 
    11:22:08<span class="hide-on-small-only"> UTC</span> 
</div> 

は、Webページで次のような構造を考えます。

Node.JSにselenium-webdriver 3.4.0を使用してテストを行っています。 webdriver.findElement(By.css('div.bottom')).getText()は私に11:22:08 UTCを与えます。次に、UTC部分文字列:webdriver.findElement(By.css('div.bottom span')).getText()を削除できました。

しかし、もっと洗練されたソリューションを探しています。私。

const getTime =() => { 
    const timeElements = $('.nav-wrapper li div.bottom'); 
    return timeElements.contents().not(timeElements.children()).text(); // get rid of SPAN with timezone 
}; 

一つは、私がスペース文字の後に続くすべてのものを削除する必要があることを答えることができますが、この質問は子孫タグに含まれるテキストなしでテキストを抽出する一般的な問題を参照している:jQueryの中で私が行うことができます。

+0

@Marcinはあなたが私達にあなたの仕事をしてください示す考えることはできますか?ありがとう – DebanjanB

+0

@DebanjanB '仕事'は何を意味しますか?サンプルシナリオを説明しました – Marcin

+0

SOボランティアが本当の問題を分析して助けてくれるよう、 '仕事環境'、 '研究環境'、 '関連HTML DOM'、'エラースタックトレース 'ありがとう – DebanjanB

答えて

0

は以下の通りJavascriptExecutorに必要な出力を取得してください:

WebElement element=driver.findElement(By.xpath("//div[@class='bottom']")); 
JavascriptExecutor jse = (JavascriptExecutor)driver; 
String time = (String) jse.executeScript("return arguments[0].childNodes[0].nodeValue;", element); 
+0

私はこの質問を投稿する前に、この記事を見ました:http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebElement.htmlこれには同様の回答が含まれています。残念ながら、JSのセレンのwebdriverはそのようなAPIを提供していないようです:http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebElement.html – Marcin

+0

ああ、申し訳ありません、私はしなかった'nodeJS'を使用していることに気づいた。子孫ノード[0] .nodeValue; "); ' – Andersson

+0

これは以下をスローします:' WebDriverError:不明なエラー:Runtime.evaluateは例外をスローしました:SyntaxError :無効なトークンまたは予期しないトークン (セッション情報:chrome = 58.0.3029.110) '。私がブラウザのコンソールに "スクリプト"を送信すると失敗しませんが、コメントは反応します。時間テキストはchildNodes [0]にあります。これは、不可視のノードが含まれているため、このソリューションがあまり堅牢で信頼性の高いものではないことを示しています。私が問題に書いている方法でそれを行う方が良い。 – Marcin