【问题标题】:I am not able to interact with an Element that is inside a #shadow-root and has an <iframe> tag on it我无法与 #shadow-root 内且上面有 <iframe> 标记的元素交互
【发布时间】:2021-07-28 01:58:12
【问题描述】:

Page source:

我在 java 中使用 selenium。 要访问 shadow-root,我使用 JavascripExecutor (document.shadowRoot.querySelector)

我能够与页面内的其他元素进行交互。但我无法进入这个 iframe 并将我想要的内容粘贴到文本框上。

这就是我与其他元素交互的方式:

WebElement selectSubError1 = (WebElement) jsExecutor.executeScript("return document.querySelector"); ((JavascriptExecutor) browser).executeScript("arguments[0].click();", selectSubError1);

如果你知道它的解决方案,请在下面评论。

【问题讨论】:

    标签: javascript selenium selenium-webdriver iframe shadow-dom


    【解决方案1】:

    您需要切换到 iframe,就像它是一个单独的窗口一样:

    https://www.guru99.com/handling-iframes-selenium.html

    driver.switchTo().frame("a077aa5e");
    

    更多 iframe 详细信息: https://stackoverflow.com/a/67383631/1387701

    【讨论】:

    • 嗨,谢谢,但这不是问题。请打开显示“页面源”的链接以查看我的代码图片。问题是切换到阴影根内的框架。这不是一个正常的框架。我已经知道的帧之间的变化。
    【解决方案2】:

    为浏览器使用选择器集线器插件。 它会节省很多时间。我也有类似的情况。 shadow-root 中的 iframe。

    CSS 选择器会帮你解决这个问题,试试这个插件会节省很多时间。

    https://chrome.google.com/webstore/detail/selectorshub-xpath-plugin/ndgimibanhlabgdgjcpbbndiehljcpfh

    //This Element is inside single shadow DOM.
    String cssSelectorForHost1 = "html > div:nth-child(1)";
    Thread.sleep(1000);
    WebElement shadowDomHostElement = driver.findElement(By.cssSelector("html > div:nth-child(1)"));
    WebElement last = (WebElement) ((JavascriptExecutor) driver).executeScript("return arguments[0].shadowRoot", shadowDomHostElement);
    Thread.sleep(1000);
    driver.switchto().form(last.findElement(By.cssSelector(".ra-move-in.ra-new-in.ra-flag-in.ra-shown.ra-pin-ac")));
    

    【讨论】:

      猜你喜欢
      • 2019-06-14
      • 2018-05-11
      • 2020-07-05
      • 2018-10-21
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 2021-09-17
      • 2018-08-13
      相关资源
      最近更新 更多