web-dev-qa-db-ja.com

Seleniumを使用してシャドウDOM要素を自動化する方法

Webページの自動化のためのJava Seleniumプロジェクトを使用しています。 Webページには、Selenium findElementメソッドを使用して対話できない多値のシャドウルートDOM要素がたくさんあります。

次の解決策を試してみました。

  • 深いCSS(最新のchromeブラウザでは動作しないでください)
  • JSエグゼクター。 (これは本当に面倒で、維持する複合になります)

ノート:

Selenium Java Frameworkで実装できるのは上記以外の他のソリューションを知っている場合は、ソリューションを渡してください。前もって感謝します !。

5
SushilG

JSexeCutorとCSSを使用してシャドウDOM要素を見つける手順:

  1. Shadow Root要素の親要素を見つけます。

  2. その要素のシャドウルートを取得します。

  3. そのシャドウルートWebエレメント上のあなたの要素を見つける

    例 :

<div id="example">
#shadow-root
<div id="root" part="root">
   <div id="label" part="label">ShadowRootLabel</div>
</div>
</ptcs-label> _

#影のルート要素を見つけるためのメソッド

public WebElement getShadowRootElement(WebElement element) {
WebElement ele = (WebElement) ((JavascriptExecutor)driver)
    .executeScript("return arguments[0].shadowRoot", element);
        return ele;
    }
 _

#ステップ1は、例えば基本要素を見つける:

WebElement root1 = driver.findElement(By.id("example"));
 _

#ステップ2

//Get shadow root element
WebElement shadowRoot1 = getShadowRootElement(root1);
 _

#ステップ3 - シャドウルートの中にあるCSSセレクタを使用して要素を見つける必要があります。XPathはここでは動作しません

//Here we will get Element inside Shadow Dom Element
WebElement shadowElement = shadowRoot3.findElement(By.cssSelector("div[id=label]"));
 _
0
Pranita Dhasade