Selenium 插件,用于管理网页上的影子 DOM 元素。
项目描述
阴影
Selenium 插件,用于管理网页上的多级阴影 DOM 元素。
影子 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。如果您想要更多级别修改脚本并准备好摇滚。
文档 链接
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。