2009-08-17 18 views
14

मैं सोच रहा हूं कि सेलेनियम का उपयोग करते समय मैं जावास्क्रिप्ट को कैसे अक्षम कर सकता हूं ताकि मैं सर्वर साइड सत्यापन का परीक्षण कर सकूं।सेलेनियम का उपयोग करते समय जावास्क्रिप्ट को कैसे अक्षम करें?

मुझे यह आलेख मिला लेकिन मुझे नहीं पता कि वास्तव में क्या करना है। जैसे मैं यह जावास्क्रिप्ट फ़ाइल बना देता हूं तो क्या?

http://thom.org.uk/2006/03/12/disabling-javascript-from-selenium/

+2

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

उत्तर

8

अन्य संभावनाओं होगा: उपयोगकर्ता के extensions.js उपयोग करने के साथ सेलेनियम आर सी निम्न URL की कोशिश के बारे में जानकारी के लिए :

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

यह इस फ़ाइल बनाने आप कार्यों है कि आप अपने परीक्षण के लिए जावास्क्रिप्ट को अक्षम करना होगा दे देंगे तरह दिखता है। जब आप इसे फिर से सक्षम करना चाहते हैं तो परीक्षण और "doEnableJavascript" फ़ंक्शन शुरू करने से पहले आप "doDisableJavascript" फ़ंक्शन को कॉल करेंगे।

+0

हालांकि मैं इसे कैसे कॉल करूं? जैसे मैं इसे कहां से बुला रहा हूँ? – chobo2

+1

आपके द्वारा बनाए गए सेलेनियम कॉलिंग फ़ंक्शंस के बिना फ़ंक्शन का नाम होगा, उदाहरण के बिना अक्षम करने योग्य जावास्क्रिप्ट को सेलेनियम से अक्षम किया जाएगा DisableJavascript – AutomatedTester

4

स्क्रिप्ट ऊपर संदर्भित उपयोग करने के लिए चरणों का बुरा नहीं कर रहे हैं:

  1. सेलेनियम "उपयोगकर्ता के extensions.js" फ़ाइल बनाएँ के रूप में लेख आप लिंक में उल्लेख किया है।
  2. विकल्प-> विकल्पों में सेलेनियम वरीयताओं में अपनी "user-extension.js" फ़ाइल का चयन करें।
  3. आदेश सूची से "अक्षम जावास्क्रिप्ट" या "सक्षम जावास्क्रिप्ट" आदेश का चयन करके स्क्रिप्ट का उपयोग करें (या इसे मैन्युअल रूप से टाइप करें)।

स्क्रीन के लिए गोली मार दी चरण 2 और 3 देखने के उदाहरण: http://i32.tinypic.com/161mgcm.jpg

अद्यतन: http://seleniumhq.org/docs/08_user_extensions.html

+0

क्या यह आदेश नूनिट में दिखाई देगा। मैं नुनिट में अपने सभी परीक्षण लिखता हूं। – chobo2

+0

मुझे विश्वास है? मैंने कोशिश नहीं की है इसलिए मैं निश्चित नहीं हो सकता। सेलेनियम आरसी (जो मुझे लगता है कि आप उपयोग कर रहे हैं) के साथ उपयोगकर्ता-एक्सटेंशन.जेएस का उपयोग करने के बारे में जानकारी के लिए मैंने अपने उत्तर में जो दस्तावेज जोड़ा है, उसे आजमाएं। – coderjoe

+0

"http://i32.tinypic.com/161mgcm.jpg" छवि कहां है? आपको कोड स्निपेट जोड़ा जाना चाहिए था। – paul

1

मैं इस समस्या को हल करने और इस ब्लॉग को खोजने का प्रयास कर रहा था लेकिन पहले पोस्ट में एक लिंक है जो अब मान्य नहीं है। लेकिन आखिर में कोड को उपयोगकर्ता-एक्सटेंशन.जेएस के अंदर रखने के लिए कोड मिला जो काम करता है। यहां यह है:

Selenium.prototype.doDisableJavascript = function() { 
    setJavascriptPref(false); 
}; 

Selenium.prototype.doEnableJavascript = function() { 
    setJavascriptPref(true); 
}; 

function setJavascriptPref(bool) { 
    prefs = Components.classes["@mozilla.org/preferences-service;1"] 
      .getService(Components.interfaces.nsIPrefBranch); 
    prefs.setBoolPref("javascript.enabled", bool); 
} 

आशा है कि यह मुझे ढूंढने के लिए समय लगेगा।

FirefoxProfile p = new FirefoxProfile(); 
p.setPreference("javascript.enabled", false); 
driver = new FirefoxDriver(p); 
18

यह यह करने के लिए यदि आप Firefox के साथ WebDriver का उपयोग एक तरीका है। यदि आप अपना फॉर्म भरते हैं तो आप अपना फॉर्म सबमिट करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं उदा। runScript और window.document.forms[0].submit() का उपयोग करें।

जब भी आप सीधे एक फार्म पर submit() फोन, प्रपत्र सीधे सर्वर को प्रस्तुत किया जाता है, कोई ऑनसबमिट गतिविधि सक्रिय है, और इसलिए, कोई क्लाइंट-साइड मान्यता। (जब तक आपकी फॉर्म एक्शन कुछ नहीं है javascript:validateForm(), जिस स्थिति में जावास्क्रिप्ट अक्षम होने पर आपका सिस्टम काम नहीं करता है)।

+0

यह नए सेलेनियम और फ़ायरफ़ॉक्स के साथ काम नहीं करता है। यह पहले काम करता था, लेकिन अब नहीं। –

0

आप जावास्क्रिप्ट निष्क्रिय करने के लिए की जरूरत नहीं है:

8

यह पाइथन कम से कम सरल जवाब है।

from selenium import webdriver 

profile = webdriver.FirefoxProfile() 
profile.set_preference("javascript.enabled", False); 
driver = webdriver.Firefox(profile) 
0

आप कोड का उपयोग करके रनटाइम के दौरान जावास्क्रिप्ट निष्क्रिय कर सकते हैं:

WebDriver driver = new FirefoxDriver(); 
driver.get("about:config"); 
Actions act = new Actions(driver); 
act.sendKeys(Keys.RETURN).sendKeys("javascript.enabled").perform(); 
Thread.sleep(1000); 
act.sendKeys(Keys.TAB).sendKeys(Keys.RETURN).sendKeys(Keys.F5).perform(); 
1

htmlunit को सेलेनियम सेटिंग्स में ब्राउज़र नाम सेट करें।

यह एक ड्राइवर है जिसे डिफ़ॉल्ट रूप से जावास्क्रिप्ट को अक्षम किया गया है https://code.google.com/p/selenium/wiki/HtmlUnitDriver। पृष्ठ के साथ बातचीत करने के लिए सेलेनियम के लिए आवश्यक जावास्क्रिप्ट अभी भी चलाने में सक्षम होगा।

1

कभी-कभी, profile.set_preference ("javascript.enabled", गलत) फ़ायरफ़ॉक्स में काम नहीं करता है। इस के आसपास पाने के लिए नीचे दिए गए पायथन का उपयोग करें:

from pyvirtualdisplay import Display 
from selenium import webdriver 
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.action_chains import ActionChains 


profile = webdriver.FirefoxProfile() 
profile.update_preferences() #May or may not be needed 

display = Display(visible=0, size=(1200, 800)) 
display.start() 

browser = webdriver.Firefox(profile) 
browser.get("about:config") 
actions = ActionChains(browser) 
actions.send_keys(Keys.RETURN) 
actions.send_keys("javascript.enabled") 
actions.perform() 
actions.send_keys(Keys.TAB) 
actions.send_keys(Keys.RETURN) 
actions.send_keys(Keys.F5) 
actions.perform() 

browser.quit() 
display.stop() 
+0

क्या आपको कोई विचार है कि set_preference क्यों काम नहीं कर रहा है? यह एक मुद्दा है जो मैं कर रहा हूं और मैं इस कामकाज का उपयोग नहीं करना चाहता हूं अगर मैं इसे 'ठीक से' कर सकता हूं। – Kiraa

+0

क्षमा करें नहीं पता –

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

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