当前位置: 首页 > 面试题库 >

如何使用selenium自动实现阴影DOM元素?

南门欣怡
2023-03-14
问题内容

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

我尝试了以下解决方案:

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

注意:

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


问题答案:

有一个很好的插件可以与selenium项目链接一起使用。它有助于编写更好,易读和可维护的代码。使用此功能,您可以访问多级影子DOM(最多4级)。这使用简单的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-
selected)和元素的其他自定义属性,请使用此属性。

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中选择下拉列表项。

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

马文

<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元素Object。

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


 类似资料:
  • 我使用JavaSelenium项目进行网页自动化。网页包含了许多多级的影子根DOM元素,我无法使用selenium方法与它们交互。 深度css(不适用于最新的chrome浏览器) 执行人。(这真的很乏味,维护起来也很复杂) 如果你知道除了上面列出的任何其他解决方案,我可以在SeleniumJava框架中实现,请传递解决方案。提前感谢!。

  • 基本上,我想访问一个出现在打印预览弹出窗口中的按钮,这是一个阴影dom元素。我尝试了一些我在stackoverflow周围找到的解决方案,但是它们不起作用,就像我试图构建的当前代码一样,它是: 检查元素打印

  • 是否可以使用Selenium/Chrome WebDriver访问影子DOM中的元素? 有人成功了吗?

  • 我可以通过以下方式访问dev中的用户名: 有没有其他方法可以通过webdriver访问ShadowDOM元素?

  • shadowdom结构:在上面的shadowdom结构中,我们可以在chrome中使用selenium和javascript访问各个元素,如下所示: 在Firefox中://div[@class='Style-Sconk-tabs'而不是(@隐藏)]//div/span[包含(text(),'AttrName')]/.../前驱兄弟姐妹::div/puch-icon-按钮[1]/铁图标[1] 在C

  • 有没有可能用蟒蛇硒在阴影DOM中找到元素? 示例用例: 我用输入了这个