Java 如何修复未知错误:未处理的检查器错误:";找不到具有指定id的上下文;
下面的代码偶尔抛出一个Java 如何修复未知错误:未处理的检查器错误:";找不到具有指定id的上下文;,java,selenium,selenium-webdriver,webdriver,selenium-chromedriver,Java,Selenium,Selenium Webdriver,Webdriver,Selenium Chromedriver,下面的代码偶尔抛出一个org.openqa.selenium.WebDriverException WebElement element = driver.findElement(by); element.click(); (new WebDriverWait(driver, 4, 100)).until(ExpectedConditions.stalenessOf(element)); 该页面如下所示(by是的选择器) ... 消息为未知错误:未处理的检查器错误:{“code”:-320
org.openqa.selenium.WebDriverException
WebElement element = driver.findElement(by);
element.click();
(new WebDriverWait(driver, 4, 100)).until(ExpectedConditions.stalenessOf(element));
该页面如下所示(by是
的选择器)
...
消息为未知错误:未处理的检查器错误:{“code”:-32000,“消息”:“找不到具有指定id的上下文”}
<代码>元素是iframe
的一部分,单击可导致iframe
的内容重新加载。在等待时引发异常。此异常意味着什么?我如何修复它?此错误消息
unknown error: unhandled inspector error: {"code":-32000,"message":"Cannot find context with specified id"}
…表示WebDriver实例无法找到所需的元素
正如您在问题中提到的,元素是
的一部分,并调用单击()
会导致重新加载iframe的内容,在这种情况下,您需要遍历回默认内容
,然后使用WebDriverWait再次切换回所需的iframe
,然后针对Stalennessof()
上一个元素或存在下一个所需元素诱导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));
使用页面的dom结构更新您的问题。首先切换到iframe,然后找到元素并单击它。Works,但是,
frametobeavailable和switchtoit
能否返回,因为旧的iframe
仍然可用?@user3561614顾名思义,frametobeavailable和switchtoit
涉及服务员和切换。所以我不会再回来了。
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));