私は、Webページの自動化のためのJava Seleniumのプロジェクトを使用しています。Webページは、私がセレン使用して対話することはできませんよというマルチレベルのシャドウ・ルートDOM要素がたくさん含まれているfindElement
方法を。
私は、次の解決方法を試してみました:
- 深いCSS(最新のChromeブラウザ上で行う作業ではありません)
- JSエグゼキュータ。(これは本当に面倒ですし、維持するために複雑になってしまいます)
注意:
あなたは、私はセレンのJavaフレームワークで実装できることを上記以外の他のソリューションを知っている場合は、ソリューションに渡してください。前もって感謝します !。
セレンプロジェクトで使用することができ、非常に良いプラグインがあるリンクが。それは、はるかに優れて読みやすく、保守し、コードを書くのに役立ちます。これを使用します(4つのレベル件まで)シャドウDOMのマルチレベルにアクセスすることができます。これは、要素を識別するために、単純なCSSセレクタを使用します。
WebElement findElement(String cssSelector)
:DOMからの単一の要素をしたい場合は、この方法を使用します
List<WebElement> findElements(String cssSelector)
:あなたはDOMからすべての要素を検索したい場合は、これを使用
WebElement findElements(WebElement parent, String cssSelector)
:あなたが親オブジェクトのDOMから単一の要素を検索したい場合は、これを使用
List<WebElement> findElements(WebElement parent, String cssSelector)
:あなたが親オブジェクトのDOMからすべての要素を検索したい場合は、これを使用
WebElement getShadowElement(WebElement parent,String selector)
:あなたが親DOMから単一の要素を検索したい場合は、これを使用
List<WebElement> getAllShadowElement(WebElement parent,String selector)
:あなたが親DOMからすべての要素を検索したい場合は、これを使用
boolean isVisible(WebElement element)
:あなたは要素の可視性を見つけたい場合は、これを使用
boolean isChecked(WebElement element)
:このチェックボックスが選択されているかどうかを確認したい場合は、これを使用
boolean isDisabled(WebElement element)
:要素が無効になっているかどうかをチェックしたい場合は、これを使用
String getAttribute(WebElement element,String attribute)
:あなたはARIA-選択し、要素の他のカスタム属性などの属性を取得したい場合は、これを使用しています。
void selectCheckbox(String label)
:ラベルを使用して、チェックボックス要素を選択するために、これを使用します。
void selectCheckbox(WebElement parentElement, String label)
:ラベルを使用して、チェックボックス要素を選択するために、これを使用します。
void selectRadio(String label)
:ラベルを用いて無線要素を選択するために、これを使用します。
void selectRadio(WebElement parentElement, String label)
:ラベルを使用して親DOMからの無線要素を選択するために、これを使用します。
void selectDropdown(String label)
:(一つだけのドロップダウンが存在するかUIにロードされている場合は、これを使用して)ラベルを使用して、ドロップダウンリストの項目を選択するには、これを使用しています。
void selectDropdown(WebElement parentElement, String label)
:ラベルを使用して親DOMからドロップダウンリストの項目を選択するには、これを使用しています。
このプラグインを使用する方法:あなたは、あなたのプロジェクトに依存する必要があります。
Mavenの
<dependency>
<groupId>io.github.sukgu</groupId>
<artifactId>automation</artifactId>
<version>0.0.4</version>
<dependency>
シャドウルートDOMエレメントの下にあることをHTMLタグの
<properties-page id="settingsPage">
<textarea id="textarea">
</properties-page>
あなたは、textarea要素オブジェクトをつかむためにあなたの枠組みの中で、このコードを使用することができます。
import io.github.sukgu.*;
Shadow shadow = new Shadow(driver);
WebElement element = shadow.findElement("properties-page#settingsPage>textarea#textarea");
String text = element.getText();