Как исправить неизвестную ошибку: необработанная ошибка инспектора: «Не удается найти контекст с указанным идентификатором» - PullRequest
0 голосов
/ 20 мая 2018

Следующий код иногда выдает org.openqa.selenium.WebDriverException.

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

Страница выглядит следующим образом (селектором для <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"}.element является частью iframe, и щелчок может вызвать перезагрузку содержимого iframe.Исключение выдается во время ожидания.Что означает это исключение и как я могу это исправить?

1 Ответ

0 голосов
/ 21 мая 2018

Это сообщение об ошибке ...

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

... означает, что экземпляру WebDriver не удалось найти нужный элемент.

Как вы упомянули вВаш вопрос о том, что элемент является частью <iframe> и вызов click() может привести к перезагрузке содержимого iframe, в этом случае вам нужно вернуться обратно к defaultContent и снова переключиться обратно к желаемому iframeс WebDriverWait , а затем вызвать WebDriverWait для stalenessOf() предыдущего элемента или наличия следующего требуемого элемента следующим образом:

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));
...