Frage

Während WebDriver ausgeführt wird, nach 3 Minuten in Laufen, erhalte ich die folgende Ausnahme und WebDriver abstürzt.

Ich verwende nur eine WebDriver Instanz und ein FirefoxDriver Profil.

Exception in thread "main" org.openqa.selenium.WebDriverException:
java.net.BindException: Address already in use: connect
System info: os.name: 'Windows XP', os.arch: 'x86', os.version: '5.1',
java.version: '1.6.0_18'
Driver info: driver.version: remote
        at
org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:
341)
        at
org.openqa.selenium.firefox.FirefoxDriver.execute(FirefoxDriver.java:
234)
        at
org.openqa.selenium.remote.RemoteWebDriver.findElements(RemoteWebDriver.java:
173)
        at
org.openqa.selenium.remote.RemoteWebDriver.findElementsByXPath(RemoteWebDriver.java:
231)
        at org.openqa.selenium.By$6.findElements(By.java:200)
        at
org.openqa.selenium.remote.RemoteWebDriver.findElements(RemoteWebDriver.java:
158)

Caused by: java.net.BindException: Address already in use: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at
org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:
123)
        at
org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:
133)
        at
org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:
149)
        at
org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:
108)
        at
org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:
415)
        at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:
641)
        at
org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:
211)
        at
org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.execute(NewProfileExtensionConnection.java:
125)
        at org.openqa.selenium.firefox.FirefoxDriver
$LazyCommandExecutor.execute(FirefoxDriver.java:341)
        at
org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:
328)
        ... 11 more 
War es hilfreich?

Lösung

Sie laufen von Outbound-Ports aus. Das heißt Sie haben Tausende von ausgehenden Verbindungen innerhalb von zwei Minuten durchgeführt. Lösung:. Einen Verbindungspool verwenden oder Ihr Programm verlangsamen

Andere Tipps

Ich hatte dieses Problem in einer Reihe von Maschinen, bei denen einige RAN Win2003, einig RAN Windows7 und viele RAN Linux. Was ich fand, war, dass alle Java-Prozesse zu schließen und ein wenig dazu beigetragen, Neustarten, vor allem nach der Java-Prozesse für viele tagelang laufen. Und was half sehr deutlich wurde Vermeidung von TCP / IP Port Erschöpfung auf MSDN mit MaxUserPort 10000 (zweimal die Standardeinstellung von 5000) und TcpTimedWaitDelay 30 (minimum) an der Win2003 Maschine, die die Standalone-Selen Raster wie die Nabenrolle ausgeführt wurde. NEUSTART nach dem Wechsel -. Gemäß den Anweisungen auf MSDN

Der Windows „netstat -b“ Befehl war auf der Win2003 Maschine, um zu bestätigen, sehr nützlich, dass Dutzende von TCP / IP-Verbindungen waren offen (Ports 4444 und 5555); das war ganz offensichtlich Teil des Selenium Grid (v2) Systems.

In Java, verwende ich driver.quit (); am Ende eines jeden Testmethode. Ich habe versucht, driver.close () und die Fähigkeit verloren, mehr als einen Test in einer Reihe laufen zu lassen.

kann ich jetzt 250 Tests laufen mit 0 Ausnahmen auf der Nabe der Java-Konsole zeigt nach oben.

Wenn Ihre Situation wie meine ist, wo Sie

  
      
  1. open-Port 1
  2.   
  3. connect zu Maschine
  4.   
  5. ??
  6.   
  7. close Port 1
  8.   
  9. open-Port 1
  10.   
  11. connect zu anderer Maschine
  12.   

versuchen socket.setSoLinger(true, 0); Hinzufügen direkt vor socket.close();.

Wie so:

socket.setSoLinger(true, 0);
socket.close();

Dies zwingt das Betriebssystem die Sockel zu lösen, anstatt sie in einem TIME_WAIT Zustand versetzt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top