2011-04-07 12 views
6

मैं ऐसी वेबसाइट का परीक्षण कर रहा हूं जिसके लिए साइन-इन जैसी कुछ चीजें करने के लिए व्यक्तिगत SSL प्रमाणपत्र आवश्यक हैं।वेबड्राइवर (सेलेनियम 2.0) के साथ व्यक्तिगत एसएसएल प्रमाणपत्रों का उपयोग

मैं एक Webdriver (सेलेनियम 2.0) परीक्षण है कि मैं एक प्रॉक्सी के साथ की स्थापना की है है:

Proxy localhostProxy = new Proxy(); 
    localhostProxy.setProxyType(Proxy.ProxyType.MANUAL); 
    localhostProxy.setHttpProxy("www-proxyname:port"); 

    FirefoxProfile profile = new FirefoxProfile(); 
    profile.setProxyPreferences(localhostProxy); 
    driver = new FirefoxDriver(profile); 

और यह मुखपृष्ठ ठीक का उपयोग करेंगे। परीक्षण फिर साइन इन बटन पर क्लिक करता है, सही क्रेडेंशियल में प्रवेश करता है और सबमिट पर क्लिक करता है। इस बिंदु पर ब्राउज़र तब लोडिंग स्थिति में जाता है, और मुझे लगता है कि ऐसा इसलिए है क्योंकि SSL प्रमाणपत्र मेरी तरफ से गायब है और इसलिए साइन इन सेवा से कनेक्ट नहीं हो सकता है।

मैं भिन्न प्रॉक्सी समाधान के लिए खोज की है, और इस पाया:

profile.setAcceptUntrustedCertificates(true); 
    profile.setAssumeUntrustedCertificateIssuer(true); 

तो मैं इसे अपने कोड में जोड़ा है, लेकिन यह मैं क्या चाहते हो प्रतीत नहीं होता है। मुझे लगता है कि मैं वेबड्राइवर को बताने का एक तरीका ढूंढ रहा हूं कि मेरा एसएसएल प्रमाणपत्र एक्स निर्देशिका में है, कृपया इस साइट तक पहुंचने पर इसका इस्तेमाल करें। क्या किसी को भी यह करना आता है?

मेरे टेस्ट कोड है:

@Test 
public void userSignsInAndVerifiesDrawerViews(){ 
      driver.get("www.url.com"); 
      waitFor(5000); 
    driver.findElement(By.xpath("//a[contains(text(), 'Sign in')]")).click(); 
    waitFor(3000); 
    String username = "seleniumtest"; 
    String password = "seleniumtest1"; 
    driver.findElement(By.id("username")).sendKeys(username); 
    driver.findElement(By.id("password")).sendKeys(password); 
    driver.findElement(By.xpath("//signin")).click(); 
    waitFor(30000); 
    String signInLinkText = driver.findElement(By.xpath("//xpath")).getText(); 
    assertEquals(signInLinkText, username); 
} 

धन्यवाद, Beccy

+0

आश्चर्यजनक रूप से, जब मैं परीक्षण चला रहा था, मैंने इसे फ़ायरफ़ॉक्स -> प्राथमिकताएं -> उन्नत -> एन्क्रिप्शन के माध्यम से भाग लिया और एक्सेस किया और प्रमाण पत्र देखने के लिए विकल्प का चयन किया ... ब्राउज़र मुझ पर दुर्घटनाग्रस्त हो गया। – Beccy

उत्तर

5

Webdriver कोई एक व्यक्तिगत प्रमाणपत्र जोड़ने के लिए तंत्र में निर्माण किया है।

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

मुझे यकीन नहीं है कि यह जावा में यह कैसे करता है, लेकिन रूबी में मैं आवश्यक फ़ाइलों को जोड़ने के लिए फ़ायरफ़ॉक्स प्रोफाइल के लेआउट_ऑन_डिस्क विधि को ओवरराइड करता हूं। जावा में same class है इसलिए आपको यह वही करने में सक्षम होना चाहिए।

+0

कृपया, जावा लिंक क्लास संपादित करें क्योंकि आपका लिंक वर्तमान में टूटा हुआ है –

+0

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

0

Webdriver ऐसा कर सकते हैं, हालांकि डेरेक सही है और उस में नहीं ले सकता।

तुम सब करने की ज़रूरत है एक कस्टम ट्रस्ट प्रबंधक है कि सभी प्रमाणपत्र पर भरोसा करता है और उसके बाद भी "होस्ट नाम सत्यापनकर्ता" को ओवरराइड करते हैं एक गैर-वास्तविक डोमेन नाम की अनुमति दें।

वहाँ एक उदाहरण मैं यहाँ गूगल पर पाया की कुछ हद तक है:

http://grepcode.com/file/repo1.maven.org/maven2/org.seleniumhq.selenium.server/selenium-server-coreless/1.0.3/org/openqa/selenium/server/TrustEverythingSSLTrustManager.java 

यह एक ही विधि आप Apache HC components साथ प्रयोग करेंगे WebDriver का उपयोग किए बिना SSL सेटिंग्स ओवरराइड करने के लिए है। मैंने इस विधि का उपयोग अपाचे एचटी घटकों का उपयोग करके सीधे HTTP पोस्ट के साथ किया है और यह उपरोक्त लिंक से "प्रकट होता है", इस अवधारणा को वेबड्राइवर के साथ भी काम करना चाहिए।

1

सुझाए गए विधि layout_on_disk() को ओवरराइट करने की आवश्यकता नहीं है।
आप फ़ाइलों को cert8.db और key3.db फाइल वाले फ़ोल्डर के रूप में लोड कर सकते हैं।

सेलेनियम आपके लिए प्रोफ़ाइल पूरी करेगा।

फिर आप फ़ायरफ़ॉक्स प्रोफ़ाइल में वरीयताओं को जोड़ सकते हैं।
जिसके परिणामस्वरूप कोड इस तरह दिखता है:

FirefoxProfile firefoxProfile = new FirefoxProfile(
      new File("/folder/location")); 
    FirefoxOptions options = new FirefoxOptions(); 

    options.setProfile(firefoxProfile); 

    WebDriver driver = new RemoteWebDriver(
      new URL("http://localhost:4444/wd/hub"), 
      options.toCapabilities()); 

सेलेनियम 3.5.3 के साथ परीक्षण किया गया।

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