如何使用Selenium自动实现阴影DOM元素? [英] How to automate shadow DOM elements using selenium?

查看:122
本文介绍了如何使用Selenium自动实现阴影DOM元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Java Selenium项目进行网页自动化.该网页包含许多我无法使用硒findElement方法与之交互的多层影子根DOM元素.

I am using Java Selenium project for web page automation. The web page contains lots of multi-level shadow-root DOM elements that I am not able to interact with using selenium findElement method.

  • 深层CSS(不适用于最新的chrome浏览器)
  • JS执行器. (这确实很繁琐,并且维护起来很复杂)

如果您知道我可以在Selenium Java框架中实现的除以上所列之外的任何其他解决方案,请传递该解决方案.在此先感谢!.

If you know any other solution other than listed above that I can implement in Selenium Java framework , please pass on the solution. Thanks in advance !.

推荐答案

有一个非常好的插件可以与selenium项目链接.它有助于编写更好,可读性和可维护性更高的代码.使用此功能,您可以访问多级影子DOM(最多4级).这使用简单的CSS选择器来识别元素.

There is a very good plugin that can be used with selenium project link. It helps in writing much better, readable and maintainable code. Using this you can access multi level of shadow DOM (upto 4 levels ) . This uses simple css selector to identify elements.

WebElement findElement(String cssSelector):如果要从DOM中获取单个元素,请使用此方法

WebElement findElement(String cssSelector) : use this method if want single element from DOM

List<WebElement> findElements(String cssSelector):如果要从DOM中查找所有元素,请使用此

List<WebElement> findElements(String cssSelector) : use this if you want to find all elements from DOM

WebElement findElements(WebElement parent, String cssSelector):如果要从父对象DOM中查找单个元素,请使用此

WebElement findElements(WebElement parent, String cssSelector) : use this if you want to find a single elements from parent object DOM

List<WebElement> findElements(WebElement parent, String cssSelector):如果要从父对象DOM中查找所有元素,请使用此

List<WebElement> findElements(WebElement parent, String cssSelector) : use this if you want to find all elements from parent object DOM

WebElement getShadowElement(WebElement parent,String selector):如果要从父DOM中查找单个元素,请使用此

WebElement getShadowElement(WebElement parent,String selector) : use this if you want to find a single element from parent DOM

List<WebElement> getAllShadowElement(WebElement parent,String selector):如果要从父DOM中查找所有元素,请使用此

List<WebElement> getAllShadowElement(WebElement parent,String selector) : use this if you want to find all elements from parent DOM

boolean isVisible(WebElement element):如果要查找元素的可见性,请使用此

boolean isVisible(WebElement element) : use this if you want to find visibility of element

boolean isChecked(WebElement element):如果要检查是否选中了复选框,请使用此

boolean isChecked(WebElement element) : use this if you want to check if checkbox is selected

boolean isDisabled(WebElement element):如果要检查元素是否已禁用,请使用此

boolean isDisabled(WebElement element) : use this if you want to check if element is disabled

String getAttribute(WebElement element,String attribute):如果要获取属性(如aria-selected)和元素的其他自定义属性,请使用此选项.

String getAttribute(WebElement element,String attribute) : use this if you want to get attribute like aria-selected and other custom attributes of elements.

void selectCheckbox(String label):使用它来选择带有标签的复选框元素.

void selectCheckbox(String label) : use this to select checkbox element using label.

void selectCheckbox(WebElement parentElement, String label):使用它来选择带有标签的复选框元素.

void selectCheckbox(WebElement parentElement, String label) : use this to select checkbox element using label.

void selectRadio(String label):使用它来使用标签选择单选元素.

void selectRadio(String label) : use this to select radio element using label.

void selectRadio(WebElement parentElement, String label):使用它可以使用标签从父DOM中选择单选元素.

void selectRadio(WebElement parentElement, String label) : use this to select radio element from parent DOM using label.

void selectDropdown(String label):使用此选项可使用标签选择下拉列表项(如果UI上仅存在或加载了一个下拉菜单,则使用此选项).

void selectDropdown(String label) : use this to select dropdown list item using label (use this if only one dropdown is present or loaded on UI).

void selectDropdown(WebElement parentElement, String label):使用它可以使用标签从父DOM中选择下拉列表项.

void selectDropdown(WebElement parentElement, String label) : use this to select dropdown list item from parent DOM using label.

如何使用此插件: 您将不得不依赖您的项目.

How to use this plugin: You will have to dependency in your project.

Maven

<dependency>
  <groupId>io.github.sukgu</groupId>
  <artifactId>automation</artifactId>
  <version>0.0.4</version>
<dependency>

对于位于卷影根dom元素下的html标签

for html tag that resides under a shadow-root dom element

<properties-page id="settingsPage"> 
  <textarea id="textarea">
</properties-page>

您可以在框架中使用此代码来获取textarea元素Object.

You can use this code in your framework to grab the textarea element Object.

  import io.github.sukgu.*;
  Shadow shadow = new Shadow(driver);
  WebElement element = shadow.findElement("properties-page#settingsPage>textarea#textarea");
  String text = element.getText();

这篇关于如何使用Selenium自动实现阴影DOM元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆