web-dev-qa-db-ja.com

XPathを使用した後のコンテンツの抽出

私は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: "-";
}

「コンテンツ」の値を取得する方法はありますか?

6
Rico Strydom

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が擬似要素を受け入れた場合に機能しますが、受け入れません。

この問題を回避するには、追加の偽の要素::afterおよび::beforeを生成するChromiumを使用するか、 https://stackoverflow.com/a/28265738/449288

7
gioele

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コマンドまたは使用したい場所でこのコンテンツ文字列を使用します。これがうまくいくことを願っています...頑張ってください

1
Nitin Singh