从渲染器接收消息超时:通过Selenium和Java在使用ChromeDriver和Chrome的windows之间切换时发生300.000错误

从渲染器接收消息超时:通过Selenium和Java在使用ChromeDriver和Chrome的windows之间切换时发生300.000错误,java,selenium,google-chrome,selenium-webdriver,selenium-chromedriver,Java,Selenium,Google Chrome,Selenium Webdriver,Selenium Chromedriver,我对selenium 3.13.0和chrome 79.0.3945.130版以及java有一个问题。我写这段代码是为了测试一个必须在两个窗口之间切换的网页。当我开始运行这个脚本时,一切正常,但当驱动程序切换到新窗口时,它似乎不再可用!过了很长一段时间,我犯了这个错误。 有人知道问题出在哪里吗 (我确信程序的控制将从循环中出来并切换到新窗口,但在驾驶员看来,在离开循环后,它将丢失。) 某些函数,如driver.quit()或driver.getWindowHandles()在退出循环后工作,但另

我对selenium 3.13.0和chrome 79.0.3945.130版以及java有一个问题。我写这段代码是为了测试一个必须在两个窗口之间切换的网页。当我开始运行这个脚本时,一切正常,但当驱动程序切换到新窗口时,它似乎不再可用!过了很长一段时间,我犯了这个错误。 有人知道问题出在哪里吗

(我确信程序的控制将从循环中出来并切换到新窗口,但在驾驶员看来,在离开循环后,它将丢失。)

某些函数,如driver.quit()或driver.getWindowHandles()在退出循环后工作,但另一些函数,如driver.getPageSource()或driver.manage().window().maximize()不工作并导致此错误

以下是我的示例代码:

public class myClassFirst {

public static void main(String[] args) throws InterruptedException {
    System.setProperty("webdriver.chrome.driver","Driver_Path");
    WebDriver driver = new ChromeDriver();
    driver.manage().window().maximize();      //it works correctly
    driver.get("Web_page_Url");
    Thread.sleep(15000);  //to load page
    System.out.println("finish waiting ...");
    /*
        some script here
    */
    // go to appropriate frame
    driver.switchTo().defaultContent();
    driver.switchTo().frame("Faci3");
    driver.switchTo().frame(driver.findElement(By.name("Commander")));
    Set<String> s = driver.getWindowHandles();
    System.out.println(s);  //print windowID of current window(1)
    //select button element
    WebElement prepareToPrint = driver.findElement(By.id("PreparePrint"));
    prepareToPrint.click();
    Thread.sleep(5000);  //to load new window(2)
    String sThis = driver.getWindowHandle();   //get windowID of current window(1)
    for (String winId:driver.getWindowHandles()) {
        if (!winId.equals(sThis)) {
            driver.switchTo().window(winId);   //switch to new window(2)
            System.out.println(winId);          //print windowID of new window(2)
            break;
        }
    }
    System.out.println("exit from the loop");
    driver.manage().window().maximize();  //From here does not work anymore(real line 92)
    Actions builder = new Actions(driver);
    builder.contextClick().perform();
    System.out.println("End = Finish");
    driver.quit();
}
}
试试这个 driver.switch to().window(window.manage().window().maximize()

此错误消息

[1579772104.277][SEVERE]: Timed out receiving message from renderer: 300.000
[1579772104.280][SEVERE]: Timed out receiving message from renderer: -0.003
Exception in thread "main" org.openqa.selenium.TimeoutException: timeout
  (Session info: chrome=79.0.3945.130)
Build info: version: '3.13.0', revision: '2f0d292', time: '2018-06-25T15:32:14.902Z'
.
.
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 79.0.3945.130, chrome: {chromedriverVersion: 79.0.3945.36 (3582db32b3389..., userDataDir: C:\Users\Sadell\AppData\Loc...}, goog:chromeOptions: {debuggerAddress: localhost:61628}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
…表示ChromeDriver无法切换到新的选项卡


您的主要问题是所使用的二进制文件版本之间的不兼容,如下所示:

  • 您正在使用chromedriver=79.0.3945.36和chrome=79.0.3945.130,并且是兼容的
  • 但是,您的Selenium客户端版本是2018-06-25T15:32:14.902Z的3.13.0,比它早了2年
因此,Selenium客户端v3.13.0、ChromeDriver v79.0和Chrome浏览器v79.0之间存在明显的不匹配


解决方案 确保:

  • JDK已升级到当前级别
  • 硒被提升到当前水平
  • ChromeDriver已更新到当前级别
  • Chrome更新到当前的Chrome 79.0版本。(根据)
  • 通过IDE清理项目工作区,并仅使用所需的依赖项重建项目
  • 亲爱的

    在这个问题上,我将我的web驱动程序从chrome改为firefox,暂时解决了这个问题。
    我希望这也能对您有所帮助。

    默认情况下,Selenium WebDriver会等待页面完全加载。但是,您可以告诉它不要,或者使用另一种PageLoadStrategy

    以下内容应该对您有所帮助

    ChromeOptions options = new ChromeOptions();
    options.setPageLoadStrategy(PageLoadStrategy.NONE);
    

    当我使用EdgeDriver解决同样的问题时,这篇文章帮助了我

    @DebanjanB先生,首先,感谢您的关注,我尝试了这个解决方案,但重复了同样的结果。我确信程序的控制将从循环中出来并切换到新窗口,但在驱动程序看来,在离开循环后将丢失。@Sr7这应该是一个不同的问题,并且有不同的标准答案。你能更新我这个答案的状态吗?我更新了我问题的代码以更好地显示发生了什么。我使用的是java版本“1.8.0_181”。你认为问题在这里吗@DebanjanB@Sr7181应该可以,因为我仍然使用171。更好地升级到231Dear@DebanjanB我将jdk更新到241版,但问题仍然存在。
    ChromeOptions options = new ChromeOptions();
    options.setPageLoadStrategy(PageLoadStrategy.NONE);