javascript - Selenium 在下拉列表中访问多个 Shadow dom 元素?

标签 javascript java selenium

我有一个下拉列表,我想单击其中一项并跟踪页面上的某些 Activity 。

我的 HTML 结构看起来像这样

    <slot>
    #shadowroot
    <myoption-cmp> #shadowroot <some anchor text>
    <myoption-cmp> #shadowroot <some anchor text>
    </slot>

......

如果你可以看到有 2 <myoption-cmp>元素,我尝试使用 findElements(By.cssSelector('myoption-cmp')。我不断收到“org.openqa.selenium.WebDriverException: javascript error: Cannot read property 'querySelectorAll' of null”。我的示例 Selenium 代码:​​

WebElement solt = parentElement.findElement(By.cssSelector("slot"));
WebElement shadowSlot = expandShadow(slot);
List<WebElement> menuCmp = shadowSlot.findElements(By.cssSelector("myoption-cmp"));
// I expect to get the list of elements nd then I'd like to access it as below.
WebElement shadow2 = expandShadow(menuCmp.get(0));
WebElement anchor = shadow2.findElement(By.cssSelector("a"));
anchor.click();  

只是想知道我是否做错了什么。

I tried using findElement and findElements, but both gave me errors like "org.openqa.selenium.WebDriverException: javascript error: Cannot read property 'querySelector/querySelectorAll' of null".

如有任何帮助或建议,我们将不胜感激。

最佳答案

能够找到解决方案。我需要使用

findElementInShadowRoot(shadowSlot, By.cssSelector('myoption-cmp'));

然后展开该元素以访问第二个阴影下方的子元素。

关于javascript - Selenium 在下拉列表中访问多个 Shadow dom 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62241338/

相关文章:

javascript - 如何在滚动到页面底部时滚动 div 元素

javascript - 如何在 Apple Watch 中显示 D3.js 图表?

java - 如何在 GeoTools 中画一条围绕单个图层中所有多边形的线?

selenium - 有没有办法在 Capybara 中通过文本查找任何元素?

javascript - 具有动态内容的 Scrapy 爬行足球统计数据

c# - 为什么我的 .net core xunit 测试找不到我的 appsettings.json?

javascript - CKeditor 将类添加到 img 标签

javascript - 用于防止与模式匹配的导入的 ESLint 规则

java - 完成解决方案所需的输入

java - JMenu 和 JPopupMenu 的 Swing 鼠标单击事件