2011-04-07 6 views
6

로그인과 같은 특정 작업을 수행하기 위해 개인 SSL 인증서가 필요한 웹 사이트를 테스트하고 있습니다.Webdriver (Selenium 2.0)에서 개인 SSL 인증서 사용

은 내가 프록시와 설정 한 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); 

그래서 난 내 코드에 추가하지만, 내가하고 싶은 일을하지 않는 것 같습니다. WebDriver에 내 SSL 인증서가 x 디렉토리에 있음을 알리는 방법을 찾고 있다고 생각합니다.이 사이트에 액세스 할 때 사용하십시오. 누구든지이 작업을 수행하는 방법을 알고 있습니까?

내 테스트 코드입니다 :

@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

이상하게도 테스트를 실행할 때 Firefox -> Preferences -> Advanced -> Encyption에 액세스하여 인증서를 볼 수있는 옵션을 선택했습니다 ... 브라우저가 다운되었습니다. – Beccy

답변

5

Webdriver은 더는 개인 인증서를 추가하기위한 메커니즘을 내장하고있다.

파이어 폭스를 사용하는 경우 파이어 폭스 프로파일을 생성하고 인증서를 추가하는 것이 유일한 방법입니다. 그런 다음 테스트를 실행할 때 프로필을 다시 사용할 수 있습니다. OR이 내 선호하는 옵션입니다. cert8.db 및 key3.db 파일을 가져 와서 webdriver가 런타임에 만드는 프로필에 추가하십시오.

나는 자바에서 이것을 어떻게하는지 잘 모르겠다. 그러나 루비에서는 필요한 여분의 파일을 추가하기 위해 FirefoxProfile의 layout_on_disk 메소드를 덮어 쓴다. Java는 same class이므로이 동일한 작업을 수행 할 수 있어야합니다. 데릭이 바로이며이 내장되어 있지 않지만

+0

plese, 링크가 현재 끊어짐으로 java 링크 클래스를 편집하십시오. –

+0

링크가 업데이트되었습니다. 나는 잠시 동안이 코드를 사용하지 않았으므로 질문에 대한 계속적인 관련성을 보증 할 수는 없습니다. 너무 많이 변경되지 않았다고 가정 만 할 수 있습니다. –

0

Webdriver은이 작업을 수행 할 수 있습니다.

모두 당신이해야 할 모든 인증서 표시를 신뢰하고 또한 "호스트 이름 검증"에를 오버라이드 (override) 사용자 정의 신뢰 관리자를 만들 것입니다 실제가 아닌 도메인 이름을 허용하십시오.

다소 내가 여기에 구글에서 발견되는 예입니다 :

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

이것은 당신이 WebDriver를 사용하지 않고 SSL 설정을 무시할 Apache HC components에 사용하는 것과 같은 방법이다. 필자는이 메소드를 Apache HTTP 컴포넌트를 사용하는 직접 HTTP 게시물과 함께 많이 사용했으며, 위의 링크에서이 개념이 WebDriver에서도 작동해야한다는 사실이 나타납니다.

1

제안 된대로 layout_on_disk() 메소드를 덮어 쓸 필요가 없습니다.
파일로 cert8.db 및 key3.db 파일이 포함 된 폴더를 프로필로로드하기 만하면됩니다.

Selenium이 (가) 프로파일을 완성합니다.

그런 다음 원하는 기본 설정을 Firefox 프로필에 추가 할 수 있습니다.
결과 코드는 다음과 같습니다

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로 테스트.