私のページには次のHTMLがあります。
<div dojoattachpoint="rowNode" class="dijitTreeRow dijitTreeRowSelected" wairole="presentation" dojoattachevent="onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick" role="presentation" title="" style="padding-left: 19px; ">
<img src="/runtime/explorer.sharedresources/javascript-1.7.22.268034/release/dojo/resources/blank.gif" alt="" dojoattachpoint="expandoNode" class="dijitTreeExpando dijitTreeExpandoLeaf" wairole="presentation" role="presentation"/>
<span dojoattachpoint="expandoNodeText" class="dijitExpandoText" wairole="presentation" role="presentation">*</span>
<span dojoattachpoint="contentNode" class="dijitTreeContent" wairole="presentation" role="presentation">
<img src="/runtime/explorer.sharedresources/javascript-1.7.22.268034/release/dojo/resources/blank.gif" alt="" dojoattachpoint="iconNode" class="dijitIcon dijitTreeIcon criterionFolder" wairole="presentation" role="presentation"/>
<span dojoattachpoint="labelNode" class="dijitTreeLabel" wairole="treeitem" tabindex="-1" waistate="selected-false" dojoattachevent="onfocus:_onLabelFocus" role="treeitem" aria-selected="true">**My TEXT**</span>
</span>
</div>
これは、要素を正しく識別するコードです。
List<WebElement> RowNodesList = elementPopup.findElements(By.xpath("//div[@dojoattachpoint =\"rowNode\"]"));
for(WebElement RowNode:RowNodesList)
{
System.out.println("Left Padding: " + RowNode.getAttribute("style"));
System.out.println("Is Row Node Displayed: " + RowNode.isDisplayed());
WebElement labelNode = RowNode.findElement(By.xpath("//span[@dojoattachpoint=\"labelNode\"]"));
boolean IsNodeDisplayed = labelNode.isDisplayed();
System.out.println("Is Label Node Displayed: " + IsNodeDisplayed);
String NodeLabel = (String) ((JavascriptExecutor) _driver).executeScript("return arguments[0].firstChild.nodeValue",labelNode);
System.out.println("Row label From javaScript: " + NodeLabel);
System.out.println("Row label: " + labelNode.getText());
System.out.println("Row Class: " + labelNode.getAttribute("class"));
}
これは、コードから生成された出力です。
Left Padding: PADDING-LEFT: 19px
Is Row Node Displayed: true
Is Label Node Displayed: false
Row label From javaScript: undefined
Row label:
Row Class: dijitTreeLabel
何らかの理由で、空の文字列が .getText() によって返されます。何か案は?前もって感謝します。
編集: 不思議なことに、ページに表示されていても、labelNode.isdisplayed() は false を返します。
編集 2:問題をより明確にするために、OP を上記のように編集しました。したがって、必要なテキストは、RowNode の子であるラベル ノードの SPAN タグにあります。RowNode は表示されるはずですが、ラベル ノードは表示されません。それが、LabelNode の .getText() が空の文字列を返す理由だと思います。
テキストを取得する他の方法はありますか?
編集3:私は問題を理解しました。それは xpath 検索文字列でした。それ以外の
WebElement labelNode = RowNode.findElement(By.xpath("//span[@dojoattachpoint=\"labelNode\"]"));
xpath を次のように変更する必要があります
WebElement labelNode = RowNode.findElement(By.xpath(".//span[@dojoattachpoint=\"labelNode\"]"));
「//」は WebDriver に現在のコンテキスト内を参照するように指示すると想定していました。しかし、どうやら、それは体全体を検索し (これは直感的ではありません)、最初に見つかった非表示の要素を返しました。「.//」を追加すると、現在のコンテキスト (RowNode) 内で検索するように指示されます。
助けてくれてありがとう。