2010-12-01 8 views
11

वेबड्राइवर चलाने के दौरान, 3 मिनट चलने के दौरान, मुझे निम्नलिखित अपवाद और वेबड्राइवर क्रैश मिलते हैं।वेबड्राइवर: java.net.BindException: पता पहले से उपयोग में है:

मैं केवल एक वेबड्राइवर उदाहरण और एक फ़ायरफ़ॉक्स ड्रायवर प्रोफ़ाइल का उपयोग कर रहा हूं।

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 
+0

क्या आप एक कोड स्निपेट पोस्ट कर सकते हैं जहां से समस्या हो रही है? – javamonkey79

+0

[वेबड्राइवर: executeScript() का संभावित डुप्लिकेट BindException का कारण बनता है] (http://stackoverflow.com/questions/4330459/webdriver-executescript-causes-bindexception) –

उत्तर

9

आप आउटबाउंड बंदरगाहों से बाहर हो रहे हैं। इसका मतलब है कि आपने दो मिनट के भीतर हजारों आउटबाउंड कनेक्शन किए हैं। समाधान: कनेक्शन पूल का उपयोग करें, या अपने प्रोग्राम को धीमा कर दें।

+0

मुझे एहसास हुआ कि वेबड्राइवर परीक्षण के माध्यम से लोड किए गए प्रत्येक पृष्ठ पर जावास्क्रिप्ट चलाना '(जावास्क्रिप्ट एक्स्सेलर) ड्राइवर) .executeScript (जावास्क्रिप्ट) 'इस समस्या का कारण बन रहा है। हालांकि, मुझे परीक्षण किए जा रहे पृष्ठों पर जावास्क्रिप्ट चलाने की आवश्यकता है। – KJW

+0

आप करते हैं लेकिन आपको एक अवास्तविक स्थिति का परीक्षण करने की आवश्यकता नहीं है।प्रैक्टिकल क्लाइंट हजारों आउटबाउंड कनेक्शन नहीं खोलेंगे। आप केवल ऐसा कर रहे हैं क्योंकि आप * सर्वर * को संतृप्त करना चाहते हैं। तो जवाब अधिक हार्डवेयर ग्राहकों का उपयोग करना है। – EJP

+2

यह सुनिश्चित नहीं है कि आप कनेक्शन पूल द्वारा क्या चाहते हैं। एक बार जब वे उपयोग किए जा रहे हैं तो मैं आउटबाउंड कनेक्शन कैसे बंद करूं? – KJW

1

अपनी स्थिति मेरा है, जहां आप

  1. खुला पोर्ट 1
  2. मशीन
  3. से कनेक्ट की तरह है ??
  4. पास पोर्ट 1
  5. खुला पोर्ट 1
  6. अलग मशीन से कनेक्ट socket.close(); से पहले socket.setSoLinger(true, 0); सीधे जोड़ने का

कोशिश।

तो जैसा:

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

इस ओएस मजबूर करता बल्कि एक TIME_WAIT राज्य में डालने से सॉकेट जारी करने के लिए,।

+1

यह उड़ान में किसी भी डेटा को त्यागने के लिए टीसीपी को भी मजबूर करता है, और यह पीयर को धारा के सामान्य अंत की बजाय एक त्रुटि ECONNRESET से निपटने के लिए भी मजबूर करता है। ये दोनों आवेदन में अर्थपूर्ण परिवर्तन हैं। सिफारिश नहीं की गई। – EJP

3

मुझे मशीनों के एक सेट में यह समस्या थी जहां कुछ Win2003 भाग गए, कुछ विंडोज 7 चलाए और कई लिनक्स चलाए। जो मैंने पाया वह था कि सभी जावा प्रक्रियाओं को बंद करना और पुनरारंभ करना थोड़ा सा मदद करता था, खासतौर पर जावा प्रक्रियाओं को अंत में कई दिनों तक चलाने के बाद। और, क्या बहुत काफी मदद की Win2003 मशीन पर MaxUserPort की (दो बार 5000 की डिफ़ॉल्ट) और (न्यूनतम) की TcpTimedWaitDelay जो हब भूमिका के रूप में स्टैंडअलोन सेलेनियम ग्रिड चल रहा था के साथ Avoiding TCP/IP Port Exhaustion on MSDN था। बदलने के बाद REBOOT - एमएसडीएन पर प्रति निर्देश।

विंडोज़ "netstat -b" कमांड Win2003 मशीन पर बहुत उपयोगी था ताकि यह सुनिश्चित किया जा सके कि दर्जनों और दर्जनों टीसीपी/आईपी कनेक्शन खुले थे (बंदरगाह 4444 और 5555); वे स्पष्ट रूप से सेलेनियम ग्रिड (v2) प्रणाली का हिस्सा थे।

जावा में, मैं driver.quit() का उपयोग करता हूं; प्रत्येक परीक्षण विधि के अंत में। मैंने driver.close() की कोशिश की और एक पंक्ति में एक से अधिक परीक्षण चलाने की क्षमता खो दी।

अब मैं हब के जावा कंसोल पर दिखाए गए 0 अपवादों के साथ 250 परीक्षण चला सकता हूं।

संबंधित मुद्दे

 संबंधित मुद्दे