在使用XPath之后提取内容:

时间:2016-11-30 10:14:35

标签: css xpath selenium-webdriver pseudo-element

我正在尝试获取CSS属性的值"内容"用:

WebElement plusOrMinusSign = currentEntityTypeLevel1.findElement(
    By.xpath("i[@class='tree-branch-head']::after"));
System.out.println(plusOrMinusSign.getCssValue("content"));

但是,我收到错误:The string 'i[@class='tree-branch-head']::after' is not a valid XPath expression.

似乎" ::after"不被承认。

HTML:

<i class="tree-branch-head" ng-class="iBranchClass()" ng-click="selectNodeHead(node)">::after
</i>

的CSS:

i:after {
    content: "-";
}

知道如何获得&#34;内容&#34;?

的价值

2 个答案:

答案 0 :(得分:6)

您正在使用By.xpath,但i[@class='tree-branch-head']::after不是有效的XPath,它是XPath表示法(i[@class='tree-branch-head'])和CSS(:after)的混合。

您应该使用By.cssSelector和有效的CSS选择器,例如i.tree-branch-head:after。如果Selenium接受了伪元素,那么这将是有效的。

要解决此问题,您可以使用Chromium生成额外的假元素::after::before,也可以使用https://stackoverflow.com/a/28265738/449288中所述的Javascript提取器。

答案 1 :(得分:0)

处理Selenium Webdriver中的伪元素

 String script = "return window.getComputedStyle(document.querySelector('Enter root class name here '),':after').getPropertyValue('content')";
            Thread.sleep(3000);
            JavascriptExecutor js = (JavascriptExecutor) driver;
            String content = (String) js.executeScript(script);
            System.out.println(content);

现在在您的assert命令或您想使用的任何地方使用此内容字符串,希望它对您有用...祝您好运