2010-11-28 16 views
13

आज, जब मैं सेलेनियम WebDrive उपयोग करते हैं, मैं एक त्रुटि मिली। मेरा मंच मैक ओएसएक्स है। यह मेरा अपवाद लॉग है।एक सेलेनियम webdriver अपवाद

ruby-1.9.2-p0 > Selenium::WebDriver.for :firefox 
Selenium::WebDriver::Error::WebDriverError: unable to bind to locking port 7054 within 45 seconds 
from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/selenium-webdriver-0.1.0/lib/selenium/webdriver/firefox/socket_lock.rb:48:in `lock' 
from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/selenium-webdriver-0.1.0/lib/selenium/webdriver/firefox/socket_lock.rb:29:in `locked' 
from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/selenium-webdriver-0.1.0/lib/selenium/webdriver/firefox/launcher.rb:32:in `launch' 
from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/selenium-webdriver-0.1.0/lib/selenium/webdriver/firefox/bridge.rb:21:in `initialize' 
from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/selenium-webdriver-0.1.0/lib/selenium/webdriver/common/driver.rb:38:in `new' 
from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/selenium-webdriver-0.1.0/lib/selenium/webdriver/common/driver.rb:38:in `for' 
from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/selenium-webdriver-0.1.0/lib/selenium/webdriver.rb:51:in `for' 
from (irb):8 
from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands/console.rb:44:in `start' 
from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands/console.rb:8:in `start' 
from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands.rb:23:in `<top (required)>' 
from script/rails:6:in `require' 
from script/rails:6:in `<main>' 

मुझे नहीं पता कि यह खुशी क्यों है। मेरा फ़ायरफ़ॉक्स पथ डिफ़ॉल्ट पथ है। आपकी मदद के लिए धन्यवाद !!

उत्तर

19

WebDriver एक म्युटेक्स के रूप में बंदरगाह 7054 ("ताला लगा बंदरगाह") का उपयोग करता है सुनिश्चित करने के लिए है कि हम एक ही समय में दो फ़ायरफ़ॉक्स उदाहरणों का शुभारंभ नहीं है। आपके द्वारा बनाए गए प्रत्येक नए इंस्टेंस में ब्राउज़र शुरू करने से पहले म्यूटेक्स की प्रतीक्षा होगी, फिर जैसे ही ब्राउज़र खुलता है, इसे रिलीज़ करें।

तो यह वास्तव में एक संसाधन समस्या हो सकती है - पूर्व में बने चालक 45 से अधिक सेकंड ले जा रहा है शुरू करने के लिए और उस समय के लिए लॉक करने पर पहना हुआ है।

यह आपके मामले में संभावना नहीं लगता है, तो यह पता है कि प्रक्रिया से लॉक रोक रखा है दिलचस्प होगा। 45 सेकंड में 45 सेकंड में lsof -i TCP:7054 चलाने का प्रयास करें।

-d (या $DEBUG = true सेटिंग) के साथ रूबी चलाना भी इसे डिबग करने के लिए कुछ उपयोगी जानकारी प्रदान करेगा।

+0

धन्यवाद! इसने मुझे समस्या को ठीक करने में मदद की, किसी भी तरह से इस प्रक्रिया को 75% सीपीयू को इस बंदरगाह को सुनकर एक प्रक्रिया हो रही थी (शायद सेलेनियम-वेबड्राइवर का एक और उदाहरण जो गर्व से नहीं रुक गया)। उस प्रक्रिया को मारने से फ़ायरफ़ॉक्स सामान्य की तरह शुरू हो जाता है। – nzifnab

+0

धन्यवाद। क्या आप कृपया मुझे बता सकते हैं कि लॉकिंग पोर्ट और म्यूटेक्स क्या है? – HelloWorldNoMore

6

मैं lsof -i TCP:7054 किया था और इसी PROCESS_ID पाया, और फिर अंत में kill -9 process_id

साथ दिया प्रक्रिया को मार डाला और फिर परीक्षण फिर से करने की कोशिश की, और यह काम किया था :)

+0

यह पूरी तरह से मेरे लिए काम किया, पता चला मैं एक प्रक्रिया है कि बंदरगाह है, जो एक अतीत परियोजना मैं पर काम किया था से एक अवशेष था पर चल रहा था। – Evolve

+0

बस यह सुनिश्चित कर लें कि आप इसे समझने से पहले बंदरगाह को कौन सी प्रक्रिया पकड़ रहे हैं! उदाहरण के लिए, मेरे मामले में बंदरगाह का उपयोग मेरे रिमोट कनेक्शन द्वारा किया जा रहा था। उस प्रक्रिया पर Kill -9 एक बुरा विचार होगा! – SamStephens

1

मैं ककड़ी का उपयोग कर + capybara + webdriver + parallel_tests, & मैं उल्लेख त्रुटि आई है। समस्या को हल करने मैं सुविधाओं के लिए निम्न/support/env.rb कहा:

unless (env_no = ENV['TEST_ENV_NUMBER'].to_i).zero? 
    # Standard, which is described at the parallel_tests github page 
    Capybara.server_port = 8888 + env_no 

    # This successfully avoids locking port error, may require less, but 
    # on my 8 cores vm, this works like a charm 
    sleep env_no * 10 
end 

यू शायद फिट करने के लिए यू क्या उपयोग ऊपर अनुकूलित करने की आवश्यकता है, यह विचार अभी शुरुआती से बचने के लिए एक सोने का समय के लिए मजबूर करने के लिए है सभी फ़ायरफ़ॉक्स उदाहरण एक ही समय में, जहां 45secs का इंतजार पर्याप्त नहीं हो सकता है।

1

मैं इसे भी प्राप्त कर रहा था और "lsof -i टीसीपी: 7054" चला रहा था और अपमानजनक पिड को मारने से मेरी समस्या भी ठीक हो गई।

0

मैंने देखा है कि यह बंदरगाह 7054 पर चलाना शामिल है, लेकिन यह बंदरगाह 7055.

bundle update पर इसके लिए देख रहा था मेरे लिए यह किया

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