首页 > 解决方案 > 如何获取加载微调器的 xpath

问题描述

我有以下 dom 。我需要找到元素(::before)。这之前代表加载微调器。当此加载微调器不可见时,我的元素将可见。

<h3 class="text-center">
::before
</h3>

我能够识别到 h3 但无法在 *.only :: 之前得到这个 *:: 在微调器消失且我的元素可见的部分之前来自 DOM 的部分。我尝试了不同的 xpath 轴位无法到达此元素

标签: selenium-webdriverxpath

解决方案


不幸的是,像这样的伪元素::before并不真正存在于 DOM 树中(因此得名),因此无法使用 XPath 选择它们。您需要改用 CSS 选择器:

console.log(
  window.getComputedStyle(
      document.querySelector('h3'), ':before'
  )
);
/* Add a heart before h3 */
h3::before {
  content: "♥";
}
<h3 class="text-center">
H3
</h3>

然后使用 aJavascriptExecutor将 JS 注入浏览器并[获取返回值][1]:

String script = "return window.getComputedStyle(document.querySelector('h3'),':before').getPropertyValue('content')";
JavascriptExecutor js = (JavascriptExecutor)driver;
String content = (String) js.executeScript(script);

推荐阅读