2012-07-16 22 views
9

मैंने एक ऐसा खिलाड़ी बनाया है जो सी # में सेलेनियम और क्रोमड्राइवर का उपयोग करके क्रोम को स्वचालित करेगा। यह ठीक काम कर रहा है।क्रोमड्राइवर कंसोल एप्लिकेशन छुपाएं

समस्या का सामना करना पड़ रहा है, जब यह क्रोमड्राइवर के लिए ऑब्जेक्ट बनाता है, तो यह क्रोमड्राइवर एप्लिकेशन शुरू करेगा, जो पॉप अप हो जाता है और फिर क्रोम लोड हो जाएगा। यह सही है क्योंकि वह एप्लिकेशन मेरे लिए क्रोम लोड कर रहा है।

क्या वैसे भी है, कि मैं उस क्रोमड्राइवर को छुपा सकता हूं?

+0

इस सॉफ्टवेयर परीक्षण के लिए है। और उस संबंध में, एक कंसोल विंडो एक स्वागत की बात है। मुझे यकीन नहीं है कि आप इसका उपयोग किसके लिए कर रहे हैं, लेकिन ऐसा लगता है कि यह परीक्षण नहीं कर रहा है। आपके अंतर्निहित समस्या का बेहतर समाधान हो सकता है, जैसे ब्राउज़र के माध्यम से सीधे एपीआई कॉल करना। –

उत्तर

6

हां, आपको Start() में वेबड्राइवर \ DriverService.cs में स्रोत कोड संशोधित करने की आवश्यकता है; जोड़ें:

this.driverServiceProcess.StartInfo.CreateNoWindow = true; 
+0

सेलेनियम परियोजना के लिए पूर्ण निर्माण प्रक्रिया का उपयोग किए बिना ऐसा करने से सावधान रहें। बस विजुअल स्टूडियो में बिल्डिंग आपको सेलेनियम प्रोजेक्ट की बिल्ड स्क्रिप्ट द्वारा जेनरेट की गई समकक्ष असेंबली नहीं देगी। – JimEvans

12

नहीं, बाइंडिंग स्रोत कोड को संशोधित किए बिना .NET बाइंडिंग में chromedriver.exe की कंसोल विंडो को छिपाने का कोई तरीका नहीं है। इसे बाइंडिंग की सुविधा के रूप में देखा जाता है, क्योंकि यह देखने में बहुत आसान बनाता है कि आपके कोड ने ChromeDriver के संसाधनों को सही तरीके से साफ नहीं किया है, क्योंकि कंसोल विंडो खुलती है। कुछ अन्य भाषाओं के मामले में, यदि आपका कोड WebDriver ऑब्जेक्ट पर quit() विधि को कॉल करके ChromeDriver के उदाहरण को ठीक से साफ़ नहीं करता है, तो आप अपनी मशीन पर चल रहे एक ज़ोंबी क्रोमेड्रिवर.एक्सई प्रक्रिया के साथ समाप्त कर सकते हैं।

+8

वाह, गंभीरता से, डाउनवॉटर? सिर्फ इसलिए कि एक जवाब वह नहीं है जिसे आप सुनना चाहते हैं, यह गलत या बुरा जवाब नहीं देता है। मैं गारंटी दे सकता हूं कि लेखक का इरादा (जैसा कि मैं लेखक हूं) के अनुमानों सहित अनुमानों में यह उत्तर पूरी तरह से सही है। – JimEvans

+0

हैलो @ जिमइवान - मुझे वास्तव में मेरे कंप्यूटरों में से एक पर एक रिवर्स समस्या है। यह कंप्यूटर IEDriverServer और ChromeDriver की सभी कंसोल विंडो छुपाता है और मुझे नहीं पता कि क्यों। कोड में इनमें से कोई भी विशिष्ट विकल्प नहीं है और जब कोड अन्य कंप्यूटरों पर चलाया जाता है तो विंडो दिखाई दे रही हैं। कोई अंतर्दृष्टि? धन्यवाद! – AngieM

+0

@AngieM क्या आप .NET भाषा बाइंडिंग का उपयोग कर रहे हैं? यदि नहीं, तो इस प्रश्न की जानकारी आपके लिए लागू नहीं होती है। अन्य भाषाओं (पायथन, रुबी, जावा) आपको इस पर कोई नियंत्रण नहीं दे सकता है कि एक अलग कमांड प्रॉम्प्ट विंडो दिखाई देती है या नहीं। – JimEvans

26

WebDriver \ DriverService.cs में संशोधन करना स्रोत कोड नवीनतम WebDriver में इस के लिए आवश्यक नहीं है। आपको केवल ChromeDriverService को तुरंत चालू करने और HideCommandPromptWindow को सत्य पर सेट करने की आवश्यकता है और फिर उस सेवा और ChromeOptions द्वारा ChromeDriver को तुरंत चालू करें। मैं नीचे

 var chromeDriverService = ChromeDriverService.CreateDefaultService(); 
     chromeDriverService.HideCommandPromptWindow = true; 
     return new ChromeDriver(chromeDriverService, new ChromeOptions()); 
+2

आप ड्राइवर बाइनरी ChromeDriverService :: CreareDefaultService (pathToBinary) के पथ भी जोड़ सकते हैं; – kirsche40

9

सी # कोड उदाहरण दे रहा हूँ अब आप इस का उपयोग कर सकते हैं:

var driverService = ChromeDriverService.CreateDefaultService(); 
driverService.HideCommandPromptWindow = true; 

var driver = new ChromeDriver(driverService, new ChromeOptions()); 

स्रोत: http://yizeng.me/2014/03/05/hide-command-prompt-window-in-selenium-webdriver-net-binding/

+0

लिंक अभी अमान्य है। –

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