是否可以使用Selenium/Chrome webdriver访问Shadow DOM中的元素?
正如预期的那样,使用普通元素搜索方法不起作用.我在w3c上看到了对switchToSubTree规范的引用,但找不到任何实际的文档,示例等.
任何人都有这个成功吗?
Protractor 1.7.0引入了一个新功能:一个新的定位器by.deepCss,有助于在shadow DOM中查找元素.
它涵盖了哪些用例?您何时想要到达影子DOM中的元素?
我提出这个问题的原因是我在这个问题的动机部分缺失了 - 我认为量角器主要是一个有助于模仿真实用户交互的高级框架.访问影子树听起来像是一个非常深层次的技术问题,为什么你想这样做让我感到困惑.
selenium css-selectors selenium-webdriver shadow-dom protractor
是否可以使用python-selenium 在Shadow DOM中找到元素?
用例示例:
我有这个input有type="date":
<input type="date">Run Code Online (Sandbox Code Playgroud)
我想点击右边的日期选择按钮,然后从日历中选择一个日期.
如果您要检查Chrome开发者工具中的元素并展开日期输入的影子根节点,您会看到该按钮显示为:
<div pseudo="-webkit-calendar-picker-indicator" id="picker"></div>
Run Code Online (Sandbox Code Playgroud)
屏幕截图演示了它在Chrome中的外观:

按ID查找"选择器"按钮会导致NoSuchElementException:
>>> date_input = driver.find_element_by_name('bday')
>>> date_input.find_element_by_id('picker')
...
selenium.common.exceptions.NoSuchElementException: Message: no such element
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用::shadow和/deep/定位器的建议在这里:
>>> driver.find_element_by_css_selector('input[name=bday]::shadow #picker')
...
selenium.common.exceptions.NoSuchElementException: Message: no such element
>>>
>>> driver.find_element_by_css_selector('input[name=bday] /deep/ #picker')
...
selenium.common.exceptions.NoSuchElementException: Message: no such element
Run Code Online (Sandbox Code Playgroud)
请注意,我可以通过向其发送密钥来更改输入中的日期:
driver.find_element_by_name('bday').send_keys('01/11/2014')
Run Code Online (Sandbox Code Playgroud)
但是,我想通过从日历中选择日期来具体设置日期.
我们正在使用 selenium web 驱动程序和 python 进行测试自动化,并尝试使用 shadow dom 设计自动化 html5 应用程序。无法识别 shadow-root 下的任何元素。例如。如果我想访问下面给出的影子根下的任何元素,那么我该怎么做?任何帮助表示赞赏。