1

私のページには次の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) 内で検索するように指示されます。

助けてくれてありがとう。

4

3 に答える 3

1

これを機能させる唯一の方法は、これを使用することでした:

var textstring = driver.findElement(global[type](elements)).getAttribute('innerHTML').then(
   function(textstring) {
      console.log(textstring);
})

globaltype は、webdriver.By.id()、xpath、または名前です。

webdriver.By.css も機能します。

于 2014-07-01T13:59:08.650 に答える
-1

System.out.println ステートメントで、「labelNode」の代わりに「contentNode」を使用しています。これは間違いでしたか、それともコードの他の場所で宣言されていますか?

C# では、次のようにしてテキストを適切に取得しました。

IWebElement labelNode = driver.FindElement(By.XPath("//span[@dojoattachpoint=\"labelNode\"]"));
string labelNodeText = labelNode.Text;
于 2012-07-24T16:16:33.240 に答える
-1

変数が WebDriver 型であるかどうかを明確にしたいと思いRowNodeます。また、正しい WebElement で get text を呼び出す必要があります。

次のコードを使用してみてください -

  WebElement labelNode = driver.findElement(By.xpath("//span[@dojoattachpoint='labelNode']"));
  System.out.println("Row label: " + labelNode.getText());
  System.out.println("Row label: " + labelNode.getAttribute("class"));

この変更後、getText() メソッドに対して空の文字列が返される場合。これは、この WebElement のテキストが表示されないことを意味します。また、implicitWait ステートメントを使用して、WebElement にアクセスする前にページが適切に読み込まれることを確認することもできます。

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

これがお役に立てば幸いです。

ブラウザでページを開いたときに「MY TEXT」がページに表示されるかどうか教えてください。表示されている場合は、getText() メソッドを使用して値を取得できます。そうでない場合は、これを試してください-

 String labelNodeText = (String) ((JavascriptExecutor) _driver).executeScript("return arguments[0].innerHTML",labelNode);
于 2012-07-24T17:08:14.397 に答える