【问题标题】:Java Selenium: Switch to iframe inside shadow-root open inside webviewJava Selenium:在 webview 内打开的 shadow-root 内切换到 iframe
【发布时间】:2019-01-08 19:06:44
【问题描述】:

我正在尝试使用 Java Selenium 在我的节点 webkit 应用程序上自动化一些测试。它的工作方式是chromedriver附加到主窗口,但我访问的任何网站都在DOM中作为webview,如下所示:

带有 DOM 的图片:

我将如何处理这个问题?在 java 中展开 shadow root 元素并尝试将上下文切换到它下面的 iframe 之后,我只是得到与我正在调用的函数无关的随机错误(在我看来)。例如:

WebElement shadowRoot = expandShadowElement(root);

WebElement iframe = shadowRoot.findElement(By.cssSelector("iframe"));
Driver.getWebDriver().switchTo().frame(iframe);

WebElement city = Driver.getWebDriver().findElement(By.className("input-btn-group"));

第二行给了我一个“isShown 的参数必须是 Element 类型”,但这没有意义,因为我没有调用 isShown 函数。

【问题讨论】:

  • 我看过那个线程,不同的是在那个问题中,只有一个影子根,访问没有问题,但我的影子根在 webview 里面,影子根下面是 iframe我尝试访问
  • 你找到解决办法了吗?

标签: java selenium iframe webview shadow-dom


【解决方案1】:

根据您的问题,一旦您扩展影子根元素,将 WebDriverWait 诱导为所需的 <iframe>frameToBeAvailableAndSwitchToIt,如下所示:

WebElement shadow_root = Driver.getWebDriver().findElement(By.xpath("//webview[@class='sel' and contains(@src,'https://www.google.com/?')][starts-with(@id,'w_Webo')]"));
WebElement shadow_root_element = (WebElement)((JavascriptExecutor)driver).executeScript("return arguments[0].shadowRoot", shadow_root);
new WebDriverWait(Driver.getWebDriver(), 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.tagName("iframe")));

注意:根据您共享的屏幕截图,标识为 By.className("input-btn-group") 的元素不可见,也不包含在答案中。

【讨论】:

  • WebDriverWait的第一个参数应该是webdriver,而不是WebElement
  • @AlexSelea 更新了答案。让我知道状态。
【解决方案2】:

我们可以按照这 3 个步骤切换到 shadow dow 内的 iframe

第一步:获取影子根元素

第 2 步:使用影子根元素找到 iframe 网页元素

第 3 步:现在切换到我们在第 2 步中得到的 iframe

loc = Locator.new(:xpath,"//locator_used_to_get_shadow_root")
sr = @driver.gets_shadow_root(loc)

iframe_inside_shadowroot = sr.find_elements(:css, "iframe")

driver.switch_to.frame(iframe_inside_shadowroot)

【讨论】:

    【解决方案3】:

    解决电子的类似问题。在电子中,他们在 webview 之上有自己的包装器,基于 Chromium webview。

    但是对于 chrome webdriver 解决方案可能是一样的。

    https://stackoverflow.com/a/63227482/4577788

    【讨论】:

      猜你喜欢
      • 2020-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      • 2014-06-11
      • 1970-01-01
      • 2021-03-10
      • 2021-04-03
      相关资源
      最近更新 更多