我有两个具有相同属性的元素,但在页面上一次显示一个(当显示一个时,另一个消失)。两者之间的唯一区别是显示的元素将具有&# 39; ::之前'选择。是否可以使用xpath或css选择器根据其id检索元素,以及是否具有:: before
答案 0 :(得分:3)
我打赌也尝试使用上面的JavaScript解决方案。
自:: after& :: before是一个伪元素,允许您从CSS将内容插入页面(不需要在HTML中)。虽然最终结果实际上并不在DOM中,但它在页面上看起来好像是 - 你看到它却无法用xpath真正找到它(例如https://css-tricks.com/almanac/selectors/a/after-and-before/)。
我还可以建议如果可能有不同的ID,或者如果它们在DOM中的不同位置使用上/下元素生成更复杂的xpath并查看它是否显示。
答案 1 :(得分:0)
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);
答案 2 :(得分:-1)
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实体。请参阅glyphs页。content: counter(li);
-对于styling lists确实有用,直到:marker出现为止。注意:您不能插入HTML(至少将以HTML形式呈现)。
content: "<h1>nope</h1>";