18

मुझे पता है कि सामान्य रूप से आप उन साइटों जो URL में उपयोगकर्ता नाम और पासवर्ड को पारित करके सेलेनियम के साथ HTTP बुनियादी प्रमाणीकरण की आवश्यकता होती है, जैसे के लिए लॉग इन कर सकते हैं:फ़ायरफ़ॉक्स में यूआरएल द्वारा HTTP मूल प्रमाणीकरण काम नहीं करता है?

selenium.open("http://myusername:[email protected]/mypath"); 

मैं Firefox 2 या 3 के साथ एक सेलेनियम परीक्षण बराबर चल रही है और वहां मुझे अभी भी "प्रमाणीकरण आवश्यक" संवाद विंडो मिलती है?

अपडेट: ऐसा लगता है कि यह सेलेनियम समस्या नहीं बल्कि फ़ायरफ़ॉक्स समस्या है। अगर मैं एफएफ भीतर मैन्युअल रूप से URL दर्ज मैं प्रमाणीकरण संवाद मिल जाएगा, लेकिन अगर मैं ओपेरा में URL दर्ज करें, मेरा पेज एक प्रमाणीकरण संवाद दिखाए बगैर प्रदर्शित होता है।

उत्तर

1

आप इस तरह सीधे हेडर में हेरफेर करने की कोशिश कर सकते: कुछ बुनियादी एन्कोडिंग और शीर्ष लेख का उपयोग करने के लिए

selenium.start("addCustomRequestHeader=true"); 

तो फिर तुम है

सबसे पहले जब आप शुरू करते हैं, आप सेलेनियम ti हेडर में हेरफेर करने के लिए सक्षम करने के लिए है इस तरह हेरफेर:

String authHeader = ""; 
    try { 
    BASE64Encoder coder = new BASE64Encoder(); 
    authHeader = coder.encode("developers:Str492ight".getBytes()); 
    } 
    catch (Exception e) 
    { 
    e.printStackTrace(); 
    } 
    setUpSelenium(); 
    startSelenium(); 
    selenium.addCustomRequestHeader("Authorization", "Basic " + authHeader); 
    selenium.open("/"); 
    selenium.waitForPageToLoad("10000"); 

मूल के बाद की जगह आवश्यक है। इस प्रकार एक बुनियादी HTTP प्रमाणीकरण हेडर कैसा दिखता है ..

और भी आप कुछ एचटीपी वॉचर्स का उपयोग यह देखने के लिए कर सकते हैं कि अनुरोध में आपका ऑथ अनुरोध है या नहीं।

या तो वायरशर्क का उपयोग करें, या बेहतर फिडलर या चार्ल्स प्रॉक्सी है।

आशा है कि इससे मदद मिलेगी। उदारता से।

+0

हाय गेर्गेले, संकेत के लिए धन्यवाद। मैंने दुर्भाग्यवश यह कोशिश की है कि प्राधिकरण विंडो अभी भी पॉप अप हो गई है। मैंने फायरबग और टैम्परडाटा के साथ HTTP हेडर को कैप्चर करने का प्रयास किया। यूआरएल http: // myusername: [email protected]/mypath पर मेरे शुरुआती अनुरोध पर दोनों के साथ मुझे कोई अनुरोध नहीं दिख रहा है। ऑथ विंडो में उपयोगकर्ता नाम/पासवर्ड दर्ज करने के बाद, अनुरोध भेज दिया गया है और HTTP शीर्षलेख में मूल ऑथ विशेषता है। – Peter

+0

अरे ... मैं केवल क्या छोड़ दिया है सर्वर इसे स्वयं का लॉग में देख रहा है अगर यह प्राप्त किया गया था या अस्वीकार कर दिया के बारे में सोच सकते हैं ... मैं माफी चाहता मेरे पास नहीं है किसी भी विचार छोड़ दिया :( – Hannibal

+0

पीटर हूँ , यदि आप सेलेनियम सर्वर का प्रॉक्सी के रूप में उपयोग कर रहे हैं तो आप केवल अनुरोध हेडर जोड़ सकते हैं। मैंने इस बारे में एक लेख लिखा है: http://mogotest.com/blog/2010/06/23/how -to-perform-basic-auth-in-selenium उम्मीद है कि आपकी मदद करता है। – nirvdrum

10

मैं फ़ायरफ़ॉक्स और इंटरनेट एक्सप्लोरर के लिए एक समाधान है। config और पूर्णांक 255 की लंबाई यह फ़ायरफ़ॉक्स बताता है कि उपयोगकर्ता नाम एक प्रमाणीकरण बॉक्स पॉपअप के लिए नहीं के साथ network.http.phishy-userpass-लंबाई बनाएँ:

Firefox के लिए, आप बारे में जाने की जरूरत है और पासवर्ड 255 से कम वर्ण हैं। अब आप प्रमाणित करने के लिए http://user:[email protected] का उपयोग कर सकते हैं।

इंटरनेट एक्सप्लोरर के लिए, आप रजिस्ट्री को संपादित करना होगा। कुंजी HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ इंटरनेट एक्सप्लोरर \ मुख्य \ FeatureControl \ FEATURE_HTTP_USERNAME_PASSWORD_DISABLE में, बनाने DWORD iexplore.exe और explorer.exe को महत्व देता है और यह सुनिश्चित करें उनके मूल्यों कर रहे हैं।

मैं NTLM प्रमाणीकरण रूप में अच्छी तरह ओवरराइड करने के लिए किया था। फ़ायरफ़ॉक्स में HTTP मूल प्रमाणीकरण वाक्यविन्यास का उपयोग करके एनटीएलएम प्रमाणित करने के लिए, बस फ़ायरफ़ॉक्स कॉन्फ़िगरेशन स्ट्रिंग नेटवर्क.automatic-ntlm-auth.trusted-uris (पहले कॉन्फ़िगरेशन विकल्प के साथ) में उपयोग किए जाने वाले डोमेन निर्दिष्ट करें। यह अकेले पंजीकरण संपादन के साथ आईई में काम करेगा।

+0

इसका भी पालन कर सकता है: http://aleetesting.blogspot.com/2011/10/selenium-webdriver-tips.html – MacGyver

+0

कैसे करें network.automatic-ntlm-auth.trusted-यूआरआई स्ट्रिंग में एक से अधिक डोमेन निर्दिष्ट (xxx, xxx;)? – iGallina

+0

आपको अधिक अपवॉट की आवश्यकता है। – rebelliard

0

जैसा कि बताया गया है, addCustomRequestHeader समाधान केवल प्रॉक्सी इंजेक्शन मोड के साथ काम कर सकता है। लेकिन जब मैंने इसे लागू करने की कोशिश की, तो मुझे उस प्रॉक्सी इंजेक्शन मोड से संबंधित अन्य मुद्दों में मिला।

यह स्पष्ट नहीं है कि जावा क्लाइंट का उपयोग करते समय प्रॉक्सी इंजेक्शन भी काम करता है। कभी भी मैं कहेंगे खुला(), मैं यह कहते हुए एक अजीब त्रुटि मिली: "this.onXhrStateChange।बाँध एक समारोह "एकमात्र समाधान मैंने पाया निहित है कि आप मूल्य खुला() विधि लेकिन जावा ग्राहक एपीआई केवल एक ही पैरामीटर स्वीकार करता है करने के लिए 'सही' के साथ एक अतिरिक्त पैरामीटर जोड़ने की जरूरत नहीं है। ।

तो मैं सेलेनियम 2 (अभी भी अब तक अल्फा) के लिए अपने परीक्षण Porting हो सकता है ब्राउज़र config समाधान के बारे में बताया जो ऊपर मैं वास्तव में के साथ के बाद से वे उन्हें समर्थन करने के लिए विक्रेता की इच्छा पर निर्भर सहज नहीं महसूस करते हैं के लिए समझौता किया था।

एक बेहतर संभावना है लेकिन मेरे मामले में यह तब तक संभव नहीं होगा जब तक सेलेनियम ग्रिड सेलेनियम 2 का समर्थन नहीं करता है।

आशा है कि किसी की भी मदद कर सके, सेबेस्टियन

+0

addCustomRequestHeader को प्रॉक्सी इंजेक्शन मोड की आवश्यकता नहीं है। यह आवश्यक है कि ब्राउज़र सेलेनियम सर्वर प्रॉक्सी के रूप में उपयोग करें। यह "* iexploreproxy" और "* piexplore" के बीच का अंतर है। यदि आप अपना लॉन्चर बनाने का निर्णय लेते हैं, तो आप आईई में सेलेनियम प्रॉक्सी के खिलाफ एचटीए लॉन्चर का भी उपयोग कर सकते हैं, उदाहरण के लिए। मैं अत्यधिक अनुशंसा करता हूं कि आप प्रॉक्सी इंजेक्शन से बचें। – nirvdrum

+0

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

5

यदि आप फ़ायरफ़ॉक्स ड्राइवर का उपयोग कर रहे हैं ... आप फ़ायरफ़ॉक्स प्रोफ़ाइल बना सकते हैं और पासवर्ड प्रबंधक में उपयोगकर्ता नाम/पास सहेज सकते हैं और ऑटो लॉगिन में ऐड-ऑन का उपयोग कर सकते हैं। याद रखें कि क्या आप सेलेनियम में फ़ायरफ़ॉक्स या क्रोम ड्राइवर बनाते हैं, डिफ़ॉल्ट रूप से यह एक अनाम प्रोफ़ाइल का उपयोग करता है। तो आपके नियमित एक्सटेंशन/एड-ऑन/आदि का कोई भी उपयोग नहीं किया जाएगा। तो यह सबसे अच्छा है कि एक प्रोफ़ाइल बनाएं जिसे स्रोत नियंत्रण में वितरित और सहेजा जा सके।

1) विंडोज़ में, रन/स्टार्ट मेनू से "firefox.exe -p" टाइप करें, प्रोफ़ाइल प्रबंधक को लाने और एक कस्टम बनाने के लिए और इसे अपने शेष कोड के साथ किसी स्थान पर सहेजें।

2) स्टार्टअप पर मत पूछो

3) चेक किया गया है डाउनलोड AutoAuth ऐड-ऑन https://addons.mozilla.org/en-US/firefox/addon/autoauth/

4) साइट है कि बुनियादी HTTP प्रमाणीकरण की आवश्यकता है पर जाएँ और साख

अगली बार बचाने के आप साइट पर जाते हैं, ऑटोएथ आपको प्रमाणीकरण आवश्यक संकेत के बिना लॉगिन करेगा।

आप NTLM है, तो आप मेजबान के नाम शामिल करने के लिए की स्थापना विन्यास को संशोधित कर सकते हैं: network.automatic-ntlm-auth.trusted-यूआरआई

11

जवाब Druska's में योगदान के लिए, आप का उपयोग कर एक ही विन्यास कर सकते हैं सेलेनियम 2 एपीआई:

FirefoxProfile profile = new FirefoxProfile(); 
profile.setPreference("network.http.phishy-userpass-length", 255); 
profile.setPreference("network.automatic-ntlm-auth.trusted-uris","yourDomain"); 
new FirefoxDriver(profile); 

यह दृष्टिकोण सरल है और आप उनके फ़ायरफ़ॉक्स विन्यास बदलने के लिए हर डेवलपर पूछने के लिए नहीं है। मैंने केवल फ़ायरफ़ॉक्स ड्राइवर के साथ परीक्षण किया।

अद्यतन:

किसी कारण से (शायद लोगों https://stackoverflow.com/a/14348701/256245 में समझाया गया है), इसके बाद के संस्करण समाधान फ़ायरफ़ॉक्स के नए संस्करणों के साथ काम नहीं करता। यहां मेरे लिए क्या काम करता है (फ़ायरफ़ॉक्स 1 9 .02 के साथ परीक्षण किया गया):

  1. AutoAuth फ़ायरफ़ॉक्स प्लगइन स्थापित करें;
  2. उस साइट पर जाएं जहां प्रमाणीकरण की आवश्यकता है।अपना उपयोगकर्ता नाम और पासवर्ड दर्ज करें और प्रमाण-पत्रों को सहेजना चुनना सुनिश्चित करें;
  3. अपनी हार्ड ड्राइव पर ऑटोएथ स्थापना फ़ाइल सहेजें: प्लगइन पेज पर, "फ़ायरफ़ॉक्स में जोड़ें" और "लिंक को इस तरह से सहेजें" पर राइट क्लिक करें;
  4. का दृष्टांत फ़ायरफ़ॉक्स निम्नलिखित के रूप में webdriver:

    FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("default"); 
    File pluginAutoAuth = new File("src/test/resources/autoauth-2.1-fx+fn.xpi"); 
    firefoxProfile.addExtension(pluginAutoAuth); 
    return new FirefoxDriver(firefoxProfile); 
    

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

संदर्भ: http://watirmelon.com/2012/06/27/automatic-firefox-authentication-when-using-selenium-webdriver-with-autoauth/

0

फ़ायरफ़ॉक्स 17 'उपयोगकर्ता नाम: पासवर्ड' (RFC1738) प्रसंस्करण Firefox में डिफ़ॉल्ट (यह पहले काम किया था) द्वारा अस्वीकृत है। हालांकि, मैंने पाया है कि इसे फिर से सक्षम किया जा सकता है:

FirefoxProfile profile = new FirefoxProfile(); 
profile.setPreference("network.negotiate-auth.trusteduris", hostname); 
driver = new FirefoxDriver(profile); 
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
selenium = new WebDriverBackedSelenium(driver, "http:// + username + ":" 
    + password + "@" 
    + hostname + ":" + port + baseUrl); 

सेलेनियम 2.28.0, फ़ायरफ़ॉक्स 17 पर काम करता है; DigestAuth लॉगिन के लिए इस्तेमाल किया।

7

संदर्भ जड़ के बाद एक स्लेश जोड़ें:

के बजाय: selenium.open("http://myusername:[email protected]/mypath");

उपयोग: selenium.open("http://myusername:[email protected]/mypath/");

यह संदर्भ के अंत में स्लेश जोड़ने दुनिया के सभी फर्क नहीं पड़ता जड़। स्लैश के बिना, पॉपअप खुलता है, स्लैश के साथ यह अपेक्षित के रूप में प्रमाणीकृत हो जाता है।

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

C:\Program Files\Mozilla Firefox>firefox http://myusername:[email protected]/mypath/ 

मेरे लिए, यह सेटिंग के बिना भी काम करता है नेटवर्क यूआरआई:

FirefoxProfile profile = new FirefoxProfile(); 
//profile.setPreference("network.automatic-ntlm-auth.trusted-uris", "mydomain.com"); 
//profile.setPreference("network.negotiate-auth.trusteduris", "mydomain.com"); 

WebDriver driver = new FirefoxDriver(profile); 

driver.navigate().to("http://myusername:[email protected]/mypath/"); 


संस्करणों
फ़ायरफ़ॉक्स 19.0,
सेलेनियम -जावा 2.31.0

+2

इच्छा है कि मैं आपको यह बताते हुए अधिक अपवर्तित कर सकता हूं कि अंतिम स्लैश आवश्यक है ... अद्भुत। एक दीवार के खिलाफ मेरे सिर टक्कर लगी थी ... –

+1

वाह। मैं दिन से संघर्ष कर रहा हूँ। यह सिर्फ एक/के साथ मेरी समस्या हल हो गया है। धन्यवाद – bhasker

+0

मुझे भी मदद करता है। अविश्वसनीय। मैं chromedriver का उपयोग कर रहा हूँ। –

0

ठीक है, आप इस फ़ायरफ़ॉक्स प्रमाणीकरण पी को संभालने के लिए आपको सिकुली स्क्रिप्ट का उपयोग कर सकते हैं विंडोज़ के साथ ही लिनक्स पर्यावरण में opup। विंडोज़/लिनक्स में

  • डाउनलोड करें और सेटअप Sikuli (निर्भरता स्थापित करने की आवश्यकता)
  • को संभालने के लिए पॉपअप निम्नलिखित Sikuli स्क्रिप्ट का उपयोग करें: जहां Authentilcat1।png पॉपअप छवि है और यह 100 पॉपअप

for i in range (100): while exists(Pattern("Authentlcatl.png").similar(0.99)): print("Found Authentication Popup") wait(2) type("admin" + Key.TAB) type("admin" + Key.ENTER)

  • उपयोग निम्न कोड को संभाल लेंगे को गति प्रदान और जावा कोड से Sikuli स्क्रिप्ट समाप्त करने के लिए:

Sikuli ट्रिगर करने के लिए स्क्रिप्ट:

String[] lincmd = { "bash", "-c", "sudo java -jar Sikuli-X/Sikuli-IDE/sikuli-script.jar Sikuli-X/Sikuli-IDE/new1.sikuli/" }; 

java.lang.Runtime.getRuntime()। Exec (lincmd); ।

Sikuli स्क्रिप्ट बर्खास्त करने के लिए:

String[] lincmd = { "bash", "-c", "sudo kill $(ps aux | grep '[s]ikuli' | awk '{print $2}')" }; 

java.lang.Runtime.getRuntime() कार्यकारी (lincmd);

  • जावा कोड से Sikuli स्क्रिप्ट ट्रिगर करने के बाद Sikuli स्क्रिप्ट किसी अन्य प्रक्रिया के रूप में अलग से जावा कोड Sikuli स्क्रिप्ट समाप्त में चलेंगे, तो अंत में।

  • तो जब भी पॉपअप स्क्रीन में दिखाई देता है, Sikuli स्क्रिप्ट को संभाल लेंगे।

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