Skip to main content

Selenium 插件,用于管理网页上的影子 DOM 元素。

项目描述

阴影

Selenium 插件,用于管理网页上的多级阴影 DOM 元素。

构建状态 编解码器 PyPI 版本 shields.io 执照

影子 DOM:

Shadow DOM 是一种提供组件样式和标记封装的 Web 标准。它是 Web 组件故事中至关重要的一部分,因为它确保组件可以在任何环境中工作,即使页面上正在使用其他 CSS 或 JavaScript。

自定义 HTML 标签:

使用 selenium 工具无法直接识别自定义 HTML 标签。使用此插件,您可以处理任何自定义 HTML 标签。

问题陈述:

  • 您已经在 java selenium 中开发了基于 Web 的自动化框架。你的前端应用程序使用了使用 shadow dom 的 Polymer。Selenium 没有提供任何处理 shadow-dom 元素的方法。
  • 您的应用程序页面包含无法直接使用 selenium 识别的自定义 HTML 标记。

解决方案:

您可以通过添加 jar 文件或在您的 java selenium 项目中包含 maven 依赖项来使用此插件。

这个怎么运作:

方法:

find_element(str css_selector):如果想要来自 DOM 的单个元素,请使用此方法

find_elements(str css_selector): 如果你想从 DOM 中查找所有元素,请使用它

find_element(object parent, str css_selector):如果您想从父对象 DOM 中查找单个元素,请使用此选项

find_elements(object parent, str css_selector):如果您想从父对象 DOM 中查找所有元素,请使用此选项

set_implicit_wait(int seconds):使用此方法进行隐式等待

set_explicit_wait(int seconds, int polling_time) raise Exception:使用此方法进行显式等待

get_shadow_element(object parent,str css_selector): 如果你想从父 DOM 中找到单个元素,请使用它

get_all_shadow_element(object parent, str css_selector): 如果你想从父 DOM 中查找所有元素,请使用它

get_parent_element(object element):如果是 web 元素,则使用它来获取父元素。

get_child_elements(object parent):使用它来获取父元素的所有子元素。

get_sibling_elements(object element):使用它来获取所有相邻(兄弟)元素。

get_sibling_element(object element, str css_selector):使用 css 选择器获取相邻(兄弟)元素。

get_next_sibling_element(object element):使用它来获取下一个相邻(兄弟)元素。

get_previous_sibling_element(object element):使用它来获取先前的相邻(兄弟)元素..

is_visible(object element):如果您想查找元素的可见性,请使用它

is_checked(object element):如果要检查是否选中了复选框,请使用此选项

is_disabled(object element):如果你想检查元素是否被禁用,请使用它

get_attribute(object element, str attribute):如果你想获得像 aria-selected 这样的属性和元素的其他自定义属性,请使用它。

select_checkbox(str label):使用它来使用标签选择复选框元素。

select_checkbox(object parent, str label):使用它来使用标签选择复选框元素。

select_radio(str label):使用它来使用标签选择单选元素。

select_radio(object parent, str label):使用它来使用标签从父 DOM 中选择单选元素。

select_dropdown(str label):使用它来使用标签选择下拉列表项(如果 UI 上只有一个下拉菜单存在或加载,则使用它)。

select_dropdown(object parent, str label):使用它从使用标签的父 DOM 中选择下拉列表项。

scroll_to(object element):使用它滚动到网页元素。

如何使用这个插件:

你必须从 PyPi 安装这个插件。

马文

pip install pyshadow

选择器:

例子:

对于 html 标签,<paper-tab title="Settings"> 您可以在您的框架中使用此代码来获取 paper-tab 元素对象。

from selenium import webdriver
from pyshadow.main import Shadow
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
shadow = Shadow(driver)
element = shadow.find_element("paper-tab[title='Settings']")
elements = shadow.find_elements("paper-tab[title='Settings']")
text = element.text

对于位于 shadow-root dom 元素下的 html 标记,<input title="The name of the employee"> 您可以在框架中使用此代码来获取 paper-tab 元素对象。

from selenium import webdriver
from pyshadow.main import Shadow
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
shadow = Shadow(driver)
element = shadow.find_element("input[title='The name of the employee']")
text = element.text

用于位于 shadow-root dom 元素下的 html 标记

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

您可以在框架中使用此代码来获取 textarea 元素对象。

from selenium import webdriver
from pyshadow.main import Shadow
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
shadow = Shadow(driver)
element = shadow.find_element("properties-page#settingsPage>textarea#textarea")
text = element.text

等待:隐式和显式

如果您想使用等待来同步您的脚本,那么您应该使用隐式或显式等待功能。

  • 对于隐式等待,您可以使用shadow.set_implicit_wait(int seconds)方法。

  • 对于显式等待,您可以使用shadow.set_explicit_wait(int seconds, int pollingTime)方法。

  • 在隐式等待中,驱动程序将等待shadow.set_implicit_wait(n)中设置的至少 n 秒。

  • 在显式等待中,驱动程序将等待shadow.set_implicit_wait(n,m)中设置的最大 n 秒。在这之间,驱动程序将每 m 秒检查一次 WebElement 是否存在。

    注意:> 用于组合多级 dom 结构。所以你可以组合5个层次的dom。如果您想要更多级别修改脚本并准备好摇滚。

    文档 链接

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pyshadow-0.0.4.tar.gz (10.6 kB 查看哈希)

已上传 source

内置分布

pyshadow-0.0.4-py3-none-any.whl (14.3 kB 查看哈希)

已上传 py3