当前位置: 首页 > 知识库问答 >
问题:

通过selenium javascriptExecutor访问影子DOM元素(聚合物)

司徒英卓
2023-03-14

正在尝试访问中男式外饰部分下的“立即购买”按钮https://shop.polymer-project.org/在chrome浏览器(V51)的JS控制台上使用以下代码:

document.querySelector('shop-app').shadowRoot.querySelector('shop-home').shadowRoot.querySelector('shop-button');

我试图在我的自动化测试中访问相同的元素,使用selenium,第1行:WebElement shop Btn=(WebElement)((JavascriptExecator)驱动程序)。执行脚本("返回document.query选择器('shop-app')。阴影Root.query选择器('shop-home')。阴影Root.query选择器('商店按钮')");

第2行:shopBtn。单击()

此代码给出错误:

Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: Cannot read property 'querySelector' of null
  (Session info: chrome=51.0.2704.106)
  (Driver info: chromedriver=2.20.353124 (035346203162d32c80f1dce587c8154a1efa0c3b),platform=Mac OS X 10.11.3 x86_64).

我们非常感谢您在这方面提供的任何帮助。


共有3个答案

长孙绍辉
2023-03-14

我尝试执行这个点击,我能够做到这一点使用火狐和使用xpath定位器

.//shop-button/a[starts-with(@aria-label, 'Men') and contains(@aria-label, 'Outerwear Shop Now')]

我正在使用硒3。

我不确定我使用的方法是否正确

干杯

孟鸿朗
2023-03-14

您必须逐个循环通过阴影根元素来找到相应的元素。

document.querySelector('nuxeo-app').shadowRoot.querySelector('nuxeo-document-create-button').shadowRoot.querySelector('paper-fab').shadowRoot.querySelector('iron-icon');
萧晔
2023-03-14

您没有指定,但看起来您正在使用Java。下面是一些有效的代码。不需要JSE。

WebDriver driver = new FirefoxDriver();
String searchText = "Men's Outerwear";
driver.get("https://shop.polymer-project.org/");
WebDriverWait wait = new WebDriverWait(driver, 5);
List<WebElement> sections = wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector("div.item")));
for (WebElement section : sections)
{
    if (section.getText().toLowerCase().contains(searchText.toLowerCase()))
    {
        section.findElement(By.linkText("SHOP NOW")).click();
        break;
    }
}
 类似资料:
  • 我可以通过以下方式访问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中找到元素? 示例用例: 我用输入了这个

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

  • 我正在测试一个使用shadow dom的新应用程序,如下所示: 有人知道我如何访问文件选择器控件中的元素吗?特别是关闭图标?

  • 问题内容: 量角器1.7.0引入了一项新功能:新的定位器,可帮助您在 影子DOM中 查找元素。 它涵盖哪些用例?您什么时候想要到达影子DOM中的元素? 我问这个问题的原因是,我在事情的动机部分上不见了- 我想到量角器主要是作为一个有助于模仿实际用户交互的高级框架。访问影子树听起来像是一项非常深入的技术工作,为什么您要这样做却使我感到困惑。 问题答案: 为了回答您的问题,这里有一个相关的问题:“ s