2012-11-13 20 views
5

मैं रूबी और वाटिर-वेबड्राइवर के लिए नया हूं। मेरे पास वीबीस्क्रिप्ट में लिखी गई हमारी साइट के लिए स्वचालन का एक सूट है और मैं इसे रूबी/वाटिर में परिवर्तित करना चाहता हूं क्योंकि अब मुझे फ़ायरफ़ॉक्स का समर्थन करना है। मैंने पाया है कि मुझे रूबी पसंद है, और मैं वॉटर पर काम कर रहा हूं, लेकिन मैंने एक सप्ताह बिताया है कि वेबड्राइवर को मेरी लॉगिन स्क्रीन भी प्रदर्शित करने की कोशिश कर रहा है।क्या वॉटर-वेबड्राइवर समर्थन उन लिंक पर क्लिक करता है जहां गंतव्य जावास्क्रिप्ट है?

साइट "मैं सहमत हूं" क्षेत्र के साथ "चेतावनी स्क्रीन" से शुरू होती है। उपयोगकर्ता मैं सहमत हूं पर क्लिक करता हूं और लॉगिन स्क्रीन के साथ प्रस्तुत किया जाता है।

<body onload="showMessage('true')"><div id="login"><div id="message"><map name="accept"> 

<area href="javascript:showLogin();" shape="rect" coords="280,390,384,432" /> 

</map></div></div></body> 

मैं क्षेत्र क्लिक करने के लिए लॉग इन स्क्रीन पेश करने के लिए (जो एक ही पृष्ठ, एक रूप वास्तव में, बस छिपा हुआ है) की जरूरत है। मैं इस दिन भर VBScript साथ कार्य करें:

objExplorer.Document.GetElementsByTagName("area")(0).click 

हालांकि, Watir-Webdriver, browser.area का उपयोग कर (: यह सूचकांक 0) .click कुछ नहीं करता है।

puts browser.area(:index, 0).shape 
=>RECT 

puts browser.area(:index, 0).coords 
=>280,390,384,432 

तो, मुझे पता है कि स्क्रिप्ट क्षेत्र तत्व को "देख" सकती है और इसके गुणों को पढ़ सकती है। यह क्लिक ईवेंट के साथ कुछ भी नहीं करता है।

अगर मैं href पर ही एक browser.goto का उपयोग करें:

browser.goto("javascript:showLogin();") 

लॉगिन दिखाई देने लगता है, लेकिन मैं तत्वों (उपयोगकर्ता नाम और पासवर्ड के लिए पाठ फ़ील्ड सेट) के साथ बातचीत नहीं कर सकते हैं। मैं डेवलपर टूल विंडो के साथ पेज को देख रहा हूं (एचटीएमएल देखने के लिए) और यह सिर्फ "लोड हो रहा है ..." कहता है।

यह वह जगह है जहां मैं अटक गया हूं। दिलचस्प बात यह है कि अगर मैं लॉगिन प्रपत्र के नाम का उपयोग करें और करना एक:

browser.form(:name, "LoginForm").submit 

मैं रूप है कि उपयोगकर्ता नाम और पासवर्ड रिक्त हैं से पॉपअप संदेश मिलता है, तो अभी भी कुछ बातचीत है।

बेशक, यदि मैं मैन्युअल रूप से उपयोगकर्ता नाम/पासवर्ड दर्ज करता हूं, तो मैं फॉर्म ठीक कर सकता हूं भले ही यह "लोड हो रहा है ..."।

मैं समझता हूं कि "when_present.click" और ब्राउज़र के लिए प्रतीक्षा करने के लिए अन्य तकनीकें; ये काम नहीं करते हैं। मेरी दुविधा यह है कि मैं क्षेत्र पर क्लिक नहीं कर सकता, और यदि मैं जावास्क्रिप्ट पर गोटो का उपयोग करता हूं, तो ब्राउज़र वॉटर से स्वचालन को अनदेखा करता है।

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

संपादित करें:

क्षमा करें, सार्वजनिक नहीं है, इसलिए मैं एक लिंक पोस्ट नहीं कर सकते। फ़ायरफ़ॉक्स में काम करने के लिए, स्क्रिप्ट ठीक काम करता है। आईई समस्या है। टिप्पणियों ने मुझे सोचा: मुझे साइट पर पहली बार नेविगेट करने पर "... प्रमाण पत्र द्वारा भरोसा नहीं किया गया प्रमाणपत्र ..." प्रमाण पत्र त्रुटि प्राप्त होती है। क्या मैं आईई में प्राप्त प्रमाणपत्र त्रुटि को फॉर्म प्रस्तुत करने से पहले स्वचालन में डिस्कनेक्ट कर सकता हूं? मैं प्रमाणपत्र त्रुटि अतीत क्लिक करने के लिए एक लाइन मैं stackoverflow पर यहाँ मिल का उपयोग करें:

browser.goto("javascript:document.getElementById('overridelink').click()") 

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

+0

साइट सार्वजनिक है? इससे लिंक मदद मिलेगी। –

+1

यह समर्थित प्रतीत होता है। वॉटर-वेबड्राइवर का उपयोग करके, 'href = "जावास्क्रिप्ट वाले क्षेत्र पर क्लिक करें: अलर्ट (' test ');"' अपेक्षित के रूप में अलर्ट बनाया गया। शायद आप कुछ ब्राउज़र संगतता मुद्दों को देख रहे हैं? उदाहरण के लिए, 'href =" जावास्क्रिप्ट: अलर्ट(); "' (नोट करें कि अलर्ट() को पास करने के लिए कोई पैरामीटर नहीं दिया गया है), आईई में कोई संदेश नहीं होने पर चेतावनी प्रदर्शित करेगा जहां फ़ायरफ़ॉक्स में यह कुछ भी नहीं करेगा। क्षेत्र में क्लिक करके मैन्युअल रूप से फ़ायरफ़ॉक्स में अपेक्षित काम करता है? –

उत्तर

6

ठीक है, मुझे लगता है कि सैकड़ों पोस्ट और Google खोजों के घंटों को पढ़ने के बाद मुझे अंततः मेरे मुद्दे का समाधान मिला: browser.execute_script।

browser.execute_script("showLogin();") 

यह इतना आसान था। ब्राउजर.goto का उपयोग पृष्ठ और वेबड्राइवर को लोड करने पर लटका हुआ है। Execute_script का उपयोग पूरी तरह से काम करता है!

+0

अच्छा! मैं इस तरह कुछ ढूंढ रहा था। अपना समाधान पोस्ट करने के लिए धन्यवाद, मुझे 'execute_script' के बारे में पता नहीं था। –