4

在我的Java項目中,我使用Selenium進行Web自動化。我正在使用chromedriver v2.20可執行文件。第一個「ChromeDriverService」被初始化,用於創建ChromeDriver,比如「新的ChromeDriver(服務,功能)」。此外,我使用BrowserMobProxy捕獲所有Web請求。 在我的測試中,我多次導航到一些URL,在每個導航驅動程序隱含等待幾秒鐘後,然後輪詢結果。 但雖然執行它給了我超時異常。Selenium ChromeDriver超時接收來自渲染器異常的消息

在我的研究我碰到這不是爲我工作的解決方案來:

  1. 而是implicitlyWait的使用了Thread.sleep
  2. 更換新RemoteWebDriver(service.getUrl(),能力);通過新的ChromeDriver(服務,功能);
  3. 新的ChromeDriver(...)後,使用Thread.sleep(1000)等待1秒鐘;

任何人都可以告訴我爲什麼會出現這個錯誤?如何處理這個?

ShouldPostToServerTest.java:

@Test 
public void setTest() throws Exception { 
    for (int i = 0; i < 3; i++) { 
     nav(); 
     poll(); 
    } 
} 

private void nav() { 
    String[] navTo = {"http://www.bestbuy.com","http://www.amazon.com"}; 
    for (int n = 0; n < 30/navTo.length; n++) { 
     for (String url : navTo) { 
      chrome.navigateTo(url); 
      chrome.waitFor(5000); 
     } 
    } 
} 

private void poll() { 
    int pollInterval = 1000; 
    int remaining = 120 * 1000; 
    boolean found = false; 
    while (remaining > 0) { 
     if (found) // populateResult(), omitted for now. 
      break; 

     chrome.waitFor(pollInterval); 
     remaining -= pollInterval; 
    } 
} 

Chrome.java:

public void navigateTo(String url) { 
    if (driver == null) 
     return; 

    driver.navigate().to(url); // TimeOut 
} 
public void waitFor(long waitFor) { 
    long start = System.currentTimeMillis(); 
    driver.manage().timeouts().implicitlyWait(waitFor, TimeUnit.MILLISECONDS); 
    long duration = System.currentTimeMillis() - start; 
    long remaining = waitFor - duration; 
    if (remaining > 0) { 
     try { 
      Thread.sleep(remaining); 
     } catch (InterruptedException e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 

連接到目標虛擬機,地址: '127.0.0.1:57086',運輸:'插座」 端口13817 只有本地連接起ChromeDriver 2.20.353124(035346203162d32c80f1dce587c8154a1efa0c3b) s是允許的。 SLF4J:無法加載類「org.slf4j.impl.StaticLoggerBinder」。 SLF4J:默認爲無操作(NOP)記錄器實現 SLF4J:有關詳細信息,請參閱http://www.slf4j.org/codes.html#StaticLoggerBinder。 矢量粉碎保護已啓用。 矢量粉碎保護已啓用。 [723.497] [嚴重]:超時從渲染器接收到消息:600.000 [1323.497] [嚴重]:超時從渲染器接收到消息:600.000

例外:

org.openqa.selenium.WebDriverException: unknown error: cannot determine loading status from timeout: Timed out receiving message from renderer: 600.000 (Session info: chrome=45.0.2454.101)
(Driver info: chromedriver=2.20.353124 (035346203162d32c80f1dce587c8154a1efa0c3b),platform=Linux 3.19.0-28-generic x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 1200.01 seconds Build info: version: '2.48.2', revision: '41bccdd10cf2c0560f637404c2d96164b67d9d67', time: '2015-10-09 13:08:06' System info: host: 'yogesh-ubuntu', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.19.0-28-generic', java.version: '1.8.0_60' Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=/tmp/.com.google.Chrome.rgDfCi}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=45.0.2454.101, platform=LINUX, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}] Session ID: a97aeb9a53ddd77e8edfac64019cc599 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206) at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:647) at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:311) at org.openqa.selenium.remote.RemoteWebDriver$RemoteNavigation.to(RemoteWebDriver.java:927) at app.core.browsers.chrome.Chrome.navigateTo(Chrome.java:112) at app.core.extensions.tests.ShouldPostToServerTest.nav(ShouldPostToServerTest.java:58) at app.core.extensions.tests.ShouldPostToServerTest.setTest(ShouldPostToServerTest.java:49)

+0

就我而言,如果我的窗口,由於越來越封閉,在一些應用程序的關閉按鈕,我遇到了這個錯誤。任何想法如何解決? – Varun

回答

4

你的代碼運行精細。可能是你使用了過時的chrome驅動程序。我建議使用最新的鉻驅動程序的exe。

+0

在第一行中,我提到了我正在使用的chromedriver可執行文件的版本。我認爲這是最新的。 – user2618875

+0

但是,當我運行它時,您的代碼運行正常 – pratapvaibhav19

+0

** @ pratapvaibhav19 **感謝您的努力。但是如果你嘗試多次運行它,它會給你以上的例外。此外,如果您將(n = 0; n <30/navTo.length; n ++)的導航循環計數從30增加到50,則會產生上述異常。 – user2618875