48

私は次のよう1000に隠された文字列からサンプルの文字列を読み込もうとしています<div>

<div id="hidden_div" style="visibility:hidden">1000</div>

WebElement.getText()Selenium 2(WebDriver)の非表示の要素では機能しないことを認識しているので、解決策(このようなもの)を検索しました。明らかに次のコードが機能するはずです。

WebElement hiddenDiv = seleniumDriver.findElement(By.id("hidden_div"));
String n = hiddenDiv.getText(); // does not work (returns "" as expected)
String script = "return arguments[0].innerText";
n = (String) ((JavascriptExecutor) driver).executeScript(script, hiddenDiv);

しかし、それは私には機能しません。変数nは常に。になりnullます。私は何が間違っているのですか?

4

8 に答える 8

27

編集:ああ、これはうまくいきます。

String script = "return document.getElementById('hidden_div').innerHTML";

ファイアフォックスで。

そして、これもそうです。

String script = "return arguments[0].innerHTML";

私も試してみましたが、純粋な Javascript では動作しないようです。こちらに記載されているように、Jquery でブラウザを起動します。SeleniumでJQueryを使用するには? スクリプトに次のコードを使用します。

String script = "return $('#hidden_div').text();";

これは機能します。

于 2012-10-24T10:58:28.617 に答える
7

すでに与えられた回答の作業に基づいて、このユーティリティメソッド(Java)を作成しました。多分これは他の誰かに役立つでしょう。

public static String getText(WebDriver driver, WebElement element){
    return (String) ((JavascriptExecutor) driver).executeScript(
        "return jQuery(arguments[0]).text();", element);
}
  • jQuery の text()を使用して、テキスト ノードのみを抽出します。innerHTML は、HTML タグも提供します。
  • noConflictの場合、$ の代わりに jQuery を使用します
  • 要素またはその可視性を操作しないでください
于 2014-02-10T17:01:00.100 に答える
0

目に見えない要素を読み取るという同じ問題に遭遇しましたが、WebElement オブジェクトを元に戻して (テキストだけでなく) さらに解析する必要がありました。

このコードは私の要件を満たしました。

(WebElement) ((JavascriptExecutor) driver).executeScript(
    "arguments[0].style[\"display\"] = \"block\";"+
    "arguments[0].style[\"visibility\"] = \"visible\";"+
    "return arguments[0];", 
element);
于 2013-06-27T13:39:28.970 に答える