私はこのような非表示の_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
になります。私は何を間違えていますか?
編集:ああこれは動作します。
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();";
これは動作します。
役に立つかもしれません:
場合によっては、element.attribute('attributeName')
を呼び出して、要素のtextContent
、innerText
、またはinnerHTML
属性から取得できる隠しテキストを取得すると便利な場合があります。
element.getAttribute("textContent")
は私のために働いた。
詳細はこちらをご覧ください-> http://yizeng.me/2014/04/08/get-text-from-hidden-elements-using-Selenium-webdriver/
すでに与えられた答えの作業を基に、このユーティリティメソッド(Java)を作成しました。たぶん、これは他の誰かに役立つでしょう。
public static String getText(WebDriver driver, WebElement element){
return (String) ((JavascriptExecutor) driver).executeScript(
"return jQuery(arguments[0]).text();", element);
}
これを試して
WebElement hiddenElement = GET YOUR ELEMENT HERE;
String hiddenContent= hiddenElement.getAttribute("textContent");
使用することをお勧めします:
JavascriptExecutor js = (JavascriptExecutor)hiddenDiv;
String n=(String) js.executeScript("return document.getElementById('hidden_div').value;");
System.out.println(n);
私は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で機能しましたが、ヘッドレスブラウザでは動作しませんでした。正確な理由はわかりません。それを見つけてください)、共有してください!
目に見えない要素を読み取るという同じ問題に遭遇しましたが、WebElementオブジェクトをさらに解析して(テキストだけでなく)さらに解析したかったのです。
このコードは私の要件を満たしました。
(WebElement) ((JavascriptExecutor) driver).executeScript(
"arguments[0].style[\"display\"] = \"block\";"+
"arguments[0].style[\"visibility\"] = \"visible\";"+
"return arguments[0];",
element);