2015-01-01 8 views
12

tl के लिए आवश्यकता होती है, डॉ:किसी को भी कैसे पथ वातावरण चर की स्थापना के बिना कोड में सेलेनियम-webdriver को chromedriver के पथ पारित करने के लिए पता है?पासिंग ('chromedriver) .path सीधे सेलेनियम-webdriver

मैं क्रोम के साथ सेलेनियम-वेबड्राइवर का उपयोग करने का प्रयास कर रहा हूं, लेकिन शारीरिक रूप से क्रोमरेड्रिवर स्थापित नहीं करना और पथ में हेरफेर करना पसंद करूंगा। मैं निम्नलिखित कोड है:

var webdriver = require('selenium-webdriver'); 
var driver = new webdriver.Builder(). 
    withCapabilities(webdriver.Capabilities.chrome()). 
    build(); 

रास्ते में chromedriver सेट के बिना, इस त्रुटि फेंकता है:

Error: The ChromeDriver could not be found on the current PATH. Please download the latest 
version of the ChromeDriver from http://chromedriver.storage.googleapis.com/index.html and 
ensure it can be found on your PATH. 

मैं सेटअप मेरे पथ के लिए है नहीं करना चाहते हैं, तो मैं से chromedriver स्थापित किया है NPM और मेरे package.json को जोड़ा गया:

"scripts": { 
    "preinstall-chromedriver": "npm install", 
    "install-chromedriver": "node node_modules/chromedriver/install.js", 
    "pretest_e2e": "npm run install-chromedriver", 
    "test_e2e": "node release/test/rune2e.js" 
}, 

अब मैं chromedriver स्थापित किया है और require('chromedriver').path साथ पथ प्राप्त कर सकते हैं, लेकिन मैं करने के लिए इस पास करने का कोई तरीका नहीं है सेलेनियम-हम bdriver। किसी को पता है?

उत्तर

33

आपको & अपनी खुद की डिफ़ॉल्ट क्रोम सेवा सेट करने की आवश्यकता है।

var webdriver = require('selenium-webdriver'); 
var chrome = require('selenium-webdriver/chrome'); 
var path = require('chromedriver').path; 

var service = new chrome.ServiceBuilder(path).build(); 
chrome.setDefaultService(service); 

var driver = new webdriver.Builder() 
    .withCapabilities(webdriver.Capabilities.chrome()) 
    .build(); 
+0

मैं Node.js के लिए नया हूँ, वहाँ दूसरी पंक्ति में एक गलती है के रूप में वहाँ सेलेनियम-webdriver अंदर कोई क्रोम तो भी आप 'लिख रहे हैं वर है क्रोम = आवश्यकता ('सेलेनियम-वेबड्राइवर/क्रोम'); '। यह सब करने के बाद भी, मुझे एक त्रुटि मिल रही है "सिंटेक्स त्रुटि: त्रुटि पार्सिंग /home/abc/node_modules/selenium-webdriver/package.json: अप्रत्याशित टोकन/ " – Tripathi29

+1

आवश्यक है ('सेलेनियम-वेबड्राइवर/क्रोम') का मतलब है लोड करना सेलेनियम-वेबड्राइवर एनपीएम स्थापना के अंदर chrome.js फ़ाइल। यह ठीक काम करना चाहिए। हालांकि, मुझे लगता है कि आपके पास भ्रष्ट पैकेज हो सकता है। Json फ़ाइल (आपको किसी अनसुलझे संदर्भ से पार्सिंग त्रुटि नहीं दिखाई देनी चाहिए)। क्या आपने इस फाइल में कोई बदलाव किया है? – jt000

+0

हाँ पैकेज जो आपने पैकेज.जेसन – Tripathi29

2

तुम भी ऐसा कर सकते हैं:

require('chromedriver'); 
const webdriver = require('selenium-webdriver'); 

const driver = new webdriver.Builder() 
    .withCapabilities(webdriver.Capabilities.chrome()) 
    .build(); 
+2

यह उतना सरल है जितना इसे प्राप्त होता है, मुझे यह पसंद है! हालांकि, ''; '' के बजाय, आपको 'path.delimiter' का उपयोग करना चाहिए। –

+0

क्या यह मूल प्रश्न हल करता है? ऐसा लगता है कि आपने उपरोक्त मेरे उत्तर से "वेबड्राइवर" चर को रेखांकित किया है। शायद मैं गलतफहमी कर रहा हूं ... – jt000

+0

यहां विचार यह है कि आपको सेवा बनाने की आवश्यकता नहीं है। यहां की चाल यह है कि '(' क्रोमेड्रिवर ') की आवश्यकता होती है; '' process.env.PATH' को क्रोमरेड्राइवर पथ जोड़ देगा। 'सेलेनियम-वेबड्राइवर' की वजह से क्रोमड्राइवर शुरू करने में सक्षम होगा यदि 'क्रोम' क्षमता वाले ड्राइवर से अनुरोध किया जाता है। – mucsi96