web-dev-qa-db-ja.com

Selenium WebDriverで非表示要素からテキストを読み取る方法は?

私はこのような非表示の_1000_からString _<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になります。私は何を間違えていますか?

34
dokaspar

編集:ああこれは動作します。

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

Firefoxで。

これもそうです。

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

私も試してみましたが、純粋なJavascriptでは動作しないようです。ここで説明したように、Jqueryでブラウザーを起動します。 SeleniumでJQueryを使用する方法 およびスクリプトに次のコードを使用します。

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

これは動作します。

23
specialscope

役に立つかもしれません:

場合によっては、element.attribute('attributeName')を呼び出して、要素のtextContentinnerText、またはinnerHTML属性から取得できる隠しテキストを取得すると便利な場合があります。

element.getAttribute("textContent")は私のために働いた。

詳細はこちらをご覧ください-> http://yizeng.me/2014/04/08/get-text-from-hidden-elements-using-Selenium-webdriver/

63
user3152984

すでに与えられた答えの作業を基に、このユーティリティメソッド(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を使用します
  • 要素を操作したり、可視性を持たないでください
6
Tim Büthe

これを試して

        WebElement hiddenElement  = GET YOUR ELEMENT HERE;
        String hiddenContent= hiddenElement.getAttribute("textContent");
2
Abhigyan

使用することをお勧めします:

JavascriptExecutor js = (JavascriptExecutor)hiddenDiv;
String n=(String) js.executeScript("return document.getElementById('hidden_div').value;");
System.out.println(n);
0
BOB

私はSelenium(およびプログラミング全体)には比較的新しいですが、私のために働いたソリューションを共有しているだけです。

Selenium 2は、非表示の可視性を持つ要素を直接処理するようには設計されていません。たとえば、IDやCSSセレクターを見つけることはできません。

ボットでは、多くのitensを含むHTMLテーブルがあり、それらをクリックすると、非表示の可視性を持つドロップダウンが開きます。それは別のフレームにさえありました。

特定の状況ですが、解決策が見つからなかったため、この(悪い)解決策を選択しましたが、butいコードにもかかわらず、それは本当に一貫して機能します。

最初にswitchToDesiredFrame();を実行する必要があります-ここにdriver.switchTo.frame()ロジックを入力します。

より:

WebElement table = driver.findElements(By.tagName("table")).get(index_1);

List<WebElement> dataCells= table .findElements(By.tagName("td"));

WebElement spceificDataCellIWanted = dataCells.get(index_2);

System.out.println(spceificDataCellIWanted.getText());

DataCellsは文字通り<td>タグであり、<td><table> "container"の下のリストの要素であるように、リストのWebElementsになります。

それはChromeとFirefoxで機能しましたが、ヘッドレスブラウザでは動作しませんでした。正確な理由はわかりません。それを見つけてください)、共有してください!

0
nickballeste

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

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

(WebElement) ((JavascriptExecutor) driver).executeScript(
    "arguments[0].style[\"display\"] = \"block\";"+
    "arguments[0].style[\"visibility\"] = \"visible\";"+
    "return arguments[0];", 
element);
0
prav