2017-03-25 5 views
2

私はJava Selenium 2.0を使用します。これは私のHTML要素です。コメントと返信のコメントが含まれています:セレン - クラス名で第1レベルの子を取得

<div class="comment-list"> 
    <div class="comment"> 
     <a class="content">Comment 1</a> 
     <div class="reply-comment"> 
      <div class="comment"> 
       <a class="content">Comment 1.1</a> 
      </div> 
      <div class="comment"> 
       <a class="content">Comment 1.2</a> 
      </div> 
     </div> 
    </div> 
    <div class="comment"> 
     <a class="content">Comment 2</a> 
    </div> 
</div> 

コメント内の内容を選択するにはどうしたらいいですか?

- Comment 1 
- Comment 2 

注: これは期待どおりの結果である

comment-list > comment > content 

を解決:私は、次のような絶対的なCSSセレクタを使用したくありません!これは私のソリューションです:

// Mark reply comments with a class "is-reply-comment" 
JavascriptExecutor js = (JavascriptExecutor) driver; 
List<WebElement> replyCommentElements = driver.findElements(By.cssSelector(".reply-comment .comment")); 
for (WebElement replyCommentElement : replyCommentElements) { 
    js.executeScript("arguments[0].className += ' is-reply-comment'", replyCommentElement); 
} 
// Find comments except comments were marked "is-reply-comment" 
List<WebElement> parentCommentElements = driver.findElements(By.cssSelector(".comment:not(.is-reply-comment)") 
+0

アブソリュートCSSセレクタを使用してみませんか?それはこの問題を解決するだろう。 – JeffC

+0

@PhuLuongはあなたの問題を解決しましたか? –

+0

申し訳ありません。私は長い間stackoverflowが恋しい。私は実際には、私のhtml構造は通常変更され、それは美しい解決策ではないので、絶対的なCSSセレクタを使いたくない。私は私の解決策を見つけ、私の質問の下に書き留めました。ありがとうございました – PhuLuong

答えて

0

このような種類の選択のためのXPathのように見える少し長いです。

しかし、それはnot()とで達成することが可能である:

//(/テキスト[@クラス= 'コンテンツ' とない( ''(テキスト()、)含まれている)]を)

それはあなたが必要なものを正確に選択します。ところで

enter image description here

<a>の要素には、終了タグ</a>がありません。

UPDATE:

私はあなたのコメントを見て、このケースでは、私が唯一、次の解決策を提案することができます

// div要素を[クラス@ = 'リストをコメント']/DIV/A [@ class = 'content']/text()

この場合、選択はまだ正しいです。

+0

ありがとうnazar_art。理想ですが、返信のコメントにドット(。)文字が含まれているとは限りません。 – PhuLuong

+0

@PhuLuongあなたはあなたの質問にこの情報を追加する必要があります。私はこれについても私の答えを更新しました。 –

2

あなたは、XPath

//div[not(@class='reply-comment')]/div/a[@class='content'] 

を使用することができますが、それは本当に

div.comment-list > div.comment > a.content 

それほど異なるCSSセレクタよりもないですが、CSSセレクタは、高速でより良いブラウザのサポートを持っており、より一貫していますXPathよりもブラウザ間で実装されています。

+0

質問を見てください。 @PhuLuongは、絶対的なCSSセレクターを使用したくないと指定しました。さらに、彼はそれを書きました。 –

+0

@nazar_artそうですね、彼は...それが私がXPathを投稿した理由です。私の主張は、この問題を解決するXPathが、CSSセレクタとほぼ同じように機能することです。それは本当に絶対的なCSSセレクタではありません...それは何でも...それはHTMLタグで始まらない。 DOMのいくつかのレベルを指定するだけです。 – JeffC

関連する問題