【问题标题】:How to fix unknown error: unhandled inspector error: "Cannot find context with specified id"如何修复未知错误:未处理的检查器错误:“找不到具有指定 ID 的上下文”
【发布时间】:2018-10-29 23:56:17
【问题描述】:

以下代码偶尔会抛出org.openqa.selenium.WebDriverException

WebElement element = driver.findElement(by);
element.click();
(new WebDriverWait(driver, 4, 100)).until(ExpectedConditions.stalenessOf(element));

页面如下所示(by 是<a></a> 的选择器)

<iframe name="name">
  <html id="frame">
    <head>
      ...
    </head>
    <body class="frameA">
      <table class="table">
        <tbody>
          <tr>
            <td id="83">
              <a></a>
            </td>
          </tr>
        </tbody>
      </table>
    </body>
  </html>
</iframe>

消息是unknown error: unhandled inspector error: {"code":-32000,"message":"Cannot find context with specified id"}elementiframe 的一部分,单击会导致 iframe 的内容重新加载。等待时抛出异常。这个异常是什么意思,我该如何解决?

【问题讨论】:

  • 使用页面的 dom 结构更新您的问题。
  • 先切换到iframe,然后找到元素并点击。

标签: java selenium selenium-webdriver webdriver selenium-chromedriver


【解决方案1】:

此错误消息...

unknown error: unhandled inspector error: {"code":-32000,"message":"Cannot find context with specified id"}

...暗示 WebDriver 实例无法找到所需的元素。

正如您在问题中提到的,该元素是 &lt;iframe&gt; 的一部分,并且调用 click() 可能会导致 iframe 的内容重新加载,在这种情况下您需要遍历回 defaultContent 并再次切换回来再次使用 WebDriverWait 到所需的 iframe,然后为 stalenessOf() 上一个元素或下一个 所需元素 的存在诱导 WebDriverWait,如下所示:

WebElement element = driver.findElement(by);
element.click();
driver.switchTo().defaultContent(); // or driver.switchTo().parentFrame();
new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("xyz")));
// wait for stalenessOf previous element (visibility of next desired element preferred)
new WebDriverWait(driver, 4, 100).until(ExpectedConditions.stalenessOf(element));
// or wait for visibility of next desired element (preferred approach)
new WebDriverWait(driver, 4, 100).until(ExpectedConditions.visibilityOfElementLocated(next_desired_element));

【讨论】:

  • 有效,但 frameToBeAvailableAndSwitchToIt 是否可以返回,因为旧的 iframe 仍然可用?
  • @user3561614 顾名思义,frameToBeAvailableAndSwitchToIt 涉及 waiterswitching 两者。所以不会回来。
猜你喜欢
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2018-10-09
相关资源
最近更新 更多