同じ属性を持つ2つの要素がありますが、ページに一度に1つずつ表示されます(1つが表示されると、もう1つは消えます)。2つの違いは、表示される要素に「:: before」が含まれることだけです。セレクタ。 xpathまたはcssセレクターを使用して、IDと:: beforeがあるかどうかに基づいて要素を取得することは可能ですか?
上記のjavascriptソリューションも試してみてください。
:: afterと:: beforeは、CSSからページにコンテンツを挿入できる疑似要素であるため(HTMLに含める必要はありません)。最終結果は実際にはDOMにありませんが、ページにはあるかのように表示されます-表示されますが、たとえばxpathで実際に見つけることはできません( https://css-tricks.com/アルマナック/セレクター/ a/after-and-before / )。
また、可能であれば、異なるIDを使用するか、DOMの異なる場所にあるかどうかを提案して、上/下の要素を使用してより複雑なxpathを作成し、それが表示されるかどうかを確認します。
String script = "return window.getComputedStyle(document.querySelector('.analyzer_search_inner.tooltipstered'),':after').getPropertyValue('content')";
Thread.sleep(3000);
JavascriptExecutor js = (JavascriptExecutor) driver;
String content = (String) js.executeScript(script);
System.out.println(content);
CSS pseudo-element は、要素の指定された部分のスタイルを設定するために使用されます。次の目的で使用できます。
_::after
_は、CSSからページにコンテンツを挿入できるようにする疑似要素です(HTMLに含まれている必要はありません)。最終結果は実際にはDOMにありませんが、ページにあるかのように表示され、基本的に次のようになります。
[〜#〜] css [〜#〜]:
_div::after {
content: "hi";
}
_
[〜#〜] html [〜#〜]:
_<div>
<!-- Rest of stuff inside the div -->
hi
</div>
_
_::before
_はまったく同じですが、HTML内の他のコンテンツの後にではなく前にコンテンツを挿入するだけです。どちらか一方を使用する唯一の理由は次のとおりです。
::after
_コンテンツもソース順で「後」にあるため、自然に互いに積み重ねられた場合、_::before
_の上に配置されます。コンテンツの値は、次のいずれかになります。
content: "a string";
_-特殊文字は、Unicodeエンティティとして特別にエンコードする必要があります。 グリフ ページを参照してください。content: counter(li);
スタイリングリスト :markerが来るまで本当に便利です。注:HTMLを挿入することはできません(少なくとも、HTMLとしてレンダリングされます)。
_content: "<h1>nope</h1>";
_