java - सफ़ारी लॉन्च करें और तब तक प्रतीक्षा करें जब तक यह बंद नहीं किया जाता है



browser process (1)

चूंकि एक सेलेनियम सफारी ड्राइवर यहाँ है

https://code.google.com/p/selenium/wiki/SafariDriver

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

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

क्रोमियम के लिए सेलेनियम के लिए मुझे इसमें एक संकेत मिला: क्रोमियम ब्राउज़र के साथ सेलेनियम का उपयोग करें

और यहां ओपेरा ड्राइवर https://code.google.com/p/selenium/wiki/OperaDriver के लिए लिंक है

एज के लिए, मुझे यह संकेत मिला है कि माइक्रोसॉफ्ट एज ब्राउज़र के लिए कोई सेलेनियम वेबड्राइवर उपलब्ध है?

इस सवाल का पहले से ही उत्तर दिया गया है:

सवाल

मैं सफ़ारी वेब ब्राउज़र को एक विशिष्ट वेबसाइट पर जाने के लिए प्रक्रिया के रूप में शुरू करना चाहता हूं, तब तक प्रतीक्षा बंद होने तक प्रतीक्षा करें।

एक विशेष स्थिति यह है कि ब्राउज़र पहले से ही खुला और चल रहा है, क्योंकि उपयोगकर्ता ने पहले से ही कुछ वेबसाइट का दौरा किया हो सकता है।

उस स्थिति में, ब्राउज़र संभवतः एक मौजूदा विंडो में एक नया टैब खोल देगा और नई लॉन्च की प्रक्रिया को तुरंत समाप्त कर दिया जाएगा। यह मेरी प्रतीक्षा प्रक्रिया को भ्रमित नहीं करना चाहिए: मैं या तो एक नई ब्राउज़र विंडो चाहता हूं (यदि उसे किसी भी तरह लागू किया जा सकता है, शायद कमांड लाइन आर्गुमेंट्स के द्वारा) और उस बंद होने तक प्रतीक्षा करें, या मौजूदा ब्राउज़र विंडो को रोक दें और तब तक इंतजार करें जब तक कि सभी टैब न बनें मेरी प्रक्रिया बंद है

वातावरण

मुझे लगता है कि यह कोई फर्क नहीं पड़ता, लेकिन मेरा प्रोग्रामिंग वातावरण Java और आप यह मान सकते हैं कि मुझे ब्राउज़र का पथ पता है।

उदाहरण

एकमात्र ब्राउज़र जिसके लिए मैं अपेक्षित व्यवहार प्राप्त कर सकता हूं, वह है Internet Explorer (उच्छ्वास।) यहां, मुझे मूल रूप से एक नया बैच स्क्रिप्ट बनाने की ज़रूरत है जो कि कुछ तरह से है

start /WAIT "" "C:\Program Files\Internet Explorer\iexplore.exe" -noframemerging http://www.test.com/

मैं फिर सीधे ब्राउज़र के बजाय बैच स्क्रिप्ट चलाता हूं और एक बार प्रतीक्षा के साथ समाप्त कर देता हूं।

इरादा प्रक्रिया

इच्छित प्रक्रिया को स्पष्ट करने के लिए:

  1. मेरा कार्यक्रम शुरू होता है
  2. मेरा प्रोग्राम सफ़ारी ब्राउज़र को अलग प्रक्रिया के रूप में लॉन्च करता है और उस प्रक्रिया के तर्क के रूप में जाने के लिए यूआरएल प्रदान करता है।
  3. सफ़ारी ब्राउज़र एक नई प्रक्रिया के रूप में एसिंक्रोनस रूप से चलाता है, और प्रदान किए गए यूआरएल का दौरा करता है। अब तक, यह आसान है।
  4. नई प्रक्रिया (सफ़ारी ब्राउज़र) को लॉन्च करने के बाद, मेरे खुद के प्रोग्राम को समाप्त होने की प्रक्रिया के लिए प्रतीक्षा करनी चाहिए। यह कठिन हिस्सा है, जैसा कि
    1. कई आधुनिक ब्राउज़र कई प्रक्रियाएं शुरू करते हैं। मुझे उन सभी के लिए इंतजार करना होगा
    2. कई आधुनिक ब्राउज़र्स किसी तरह अपने द्वारा शुरू की गई प्रक्रिया से खुद को "अलग कर सकते हैं" माफ करना, मुझे एक बेहतर शब्द नहीं पता है, मेरा क्या मतलब है: मैं एक ऐसी प्रक्रिया शुरू करता हूं जो फिर एक और प्रक्रिया शुरू करता है और तुरंत समाप्त हो जाता है जबकि दूसरी प्रक्रिया चलती रहती है अगर मैं अपने प्रोग्राम द्वारा मूल रूप से शुरू की गई ब्राउज़र प्रक्रिया की प्रतीक्षा करता हूं, तब तक प्रतीक्षा समाप्त हो जाएगी, जब तक कि ब्राउज़र अभी भी खुला हो।
    3. कई ब्राउज़रों में एहसास हुआ ऊपर का एक विशेष मामला टैब ब्राउजिंग है जैसा कि ब्राउज़र पहले से ही खुले है (उपयोगकर्ता द्वारा शुरू की गई अलग प्रक्रिया में) जब मैं इसे लॉन्च करता हूं, तो मेरी नई शुरुआत की गई ब्राउज़र प्रक्रिया सरल यूआरएल पर जाने के लिए यूआरएल को सरल मौजूदा प्रक्रिया और समाप्त। उपयोगकर्ता अभी भी मेरे प्रदान किए गए यूआरएल पर है, जबकि मेरा कार्यक्रम सोचता है कि उसने ब्राउज़र बंद कर दिया है। इस समस्या को संभवतः एक विशेष आदेश पंक्ति तर्क निर्दिष्ट करके मना किया जा सकता है, जैसे IE के लिए noframemerging
  5. एक बार ब्राउज़र समाप्त हो गया है या मैं प्रदान की गई यूआरएल से संबंधित सभी टैब बंद कर दिए गए हैं, मेरा प्रोग्राम रुकने के लिए रुक जाएगा और इसके बजाए अपना व्यवसाय जारी रखेगा

उपयोग का मामला यह है कि मेरे पास एक वेब अनुप्रयोग है जो या तो स्थानीय स्तर पर या सर्वर पर चला सकता है यदि यह स्थानीय रूप से चलाया जाता है, तो यह एक वेब सर्वर की शुरूआत करता है, फिर प्रवेश पृष्ठ पर जाने के लिए ब्राउज़र को खोलता है। ब्राउज़र बंद होने के बाद, उस वेब एप्लिकेशन को बंद होना चाहिए यह इंटरनेट एक्सप्लोरर के लिए मज़बूती से काम करता है अन्य सभी मामलों के लिए, उपयोगकर्ता को ब्राउज़र बंद करना होगा और फिर, स्पष्ट रूप से, वेब अनुप्रयोग। इस प्रकार, यदि मैं सफ़ारी को समाप्त करने के लिए मज़बूती से इंतजार कर सकता हूं, तो इससे उपयोगकर्ता का अनुभव बहुत बेहतर होगा।

समाधान प्राथमिकताएं:

समाधान निम्न क्रम में पसंद किए जाते हैं

  1. जो कुछ शुद्ध जावा JRE के साथ जहाज है इसमें ब्राउज़र को विशेष कमांड लाइन तर्क शामिल हैं।
  2. जिन चीजें मुझे आवश्यकता होती है, उदाहरण के लिए, एक बैच स्क्रिप्ट बनाएं (जैसे कि IE मामले में।)
  3. जो कुछ भी तीसरे पक्ष के खुला स्रोत पुस्तकालयों की आवश्यकता है
  4. किसी भी चीज की आवश्यकता होती है, जो 3 वीं पार्टी बंद स्रोत पुस्तकालयों की आवश्यकता होती है।

किसी भी प्रोग्रामिंग भाषा स्वतंत्र समाधान (जैसे, कमांड लाइन तर्क केवल) एक शुद्ध जावा एक से अधिक पसंद किया जाता है।

कारण: आदर्श मामले में, मैं जानना चाहता हूं कि वास्तव में क्या किया गया है और इसे अपने कोड में शामिल करें जैसा कि मैं अलग-अलग ब्राउज़रों का समर्थन करना चाहता हूं (नीचे "पीएस" देखें), मैं एक ब्राउज़र प्रति लाइब्रेरी को शामिल करने से बचने के लिए चाहूंगा अंत में, मैं वाणिज्यिक या बंद स्रोत पुस्तकालयों का उपयोग नहीं कर सकता, लेकिन यदि कोई बेहतर जवाब नहीं निकलता है बेशक, मैं स्वीकृति के साथ किसी भी कार्यशील समाधान का सम्मान करेगा। मैं "1" प्रकार के प्रथम (काफी अच्छा) काम करने वाले उत्तर को स्वीकार करूँगा अगर कम वरीयताओं के उत्तर बढ़ते हैं, तो उनमें से सबसे अच्छे व्यक्ति को स्वीकार करने से पहले मैं कुछ दिनों की प्रतीक्षा करूँगा।

पुनश्च

मैं अन्य ब्राउज़रों के लिए कुछ समान प्रश्नों का शुभारंभ करेंगे। चूंकि मेरा मानना ​​है कि ब्राउज़र कमांड लाइन तर्कों में वे काफी अलग हैं और जिस तरह से वे थ्रेड्स और उप प्रक्रियाएं लॉन्च करते हैं, मुझे लगता है कि यह समझ में आता है अगर मैं बस किसी भी ब्राउज़र को शुरू करने के बारे में पूछता हूं और उसकी समाप्ति की प्रतीक्षा करता हूं, तो "सही" जवाब निर्धारित करने में काफी मुश्किल होगी। जैसे, सुप्रसिद्ध ब्राउज़र के प्रति एक सवाल संदर्भ का एक अच्छा बिंदु भी हो सकता है।





wait