개발자 채널의 WebDriver API

WebDriver에서는 브라우저에서 사용자 시나리오를 자동으로 테스트하는 API를 제공합니다. 이 문서에서는 Internet Explorer 개발자 채널에서 WebDriver를 사용하는 데 대해 자세히 설명합니다.

WebDriver란?

개발자는 WebDriver를 사용하여 웹 페이지를 조작하는 사용자를 시뮬레이트하고 결과를 다시 보고하는 자동화된 테스트를 생성할 수 있습니다. WebDriver에서는 브라우저에서 실행 중인 JavaScript에서는 액세스할 수 없는 기능과 정보에 액세스할 수 있으며 사용자 이벤트나 OS 수준 이벤트를 더욱 정확하게 시뮬레이트할 수 있으므로 JavaScript와는 다릅니다.

단일 테스트 세션에서 여러 창, 탭 및 웹 페이지에 대한 테스트를 관리할 수도 있습니다.

Internet Explorer 개발자 채널에서 WebDriver 설치

먼저 Internet Explorer 개발자 채널을 다운로드하고 설치합니다.

Internet Explorer 11을 실행 중인 Windows 8.1Windows 7 SP1 고객이 다운로드할 수 있습니다.

Internet Explorer 개발자 채널을 통해 WebDriver를 설치했나요?

예, 하지만 활성화되지 않았습니다. WebDriver가 활성화되고 나면 액세스 방법을 아는 모든 프로그램에서 브라우저를 제어할 수 있습니다. 예기치 않게 브라우저가 제어되어 사용자가 놀라지 않도록 최신 버전의 WebDriver는 수동으로 활성화해야 합니다. 다음 단계를 수행하세요.

  • 관리자 권한으로 명령 프롬프트를 엽니다. 이 작업을 수행하는 가장 간단한 방법은 Windows 로고 키 + X를 눌러 빠른 연결 메뉴를 표시하고 A를 눌러 "명령 프롬프트(관리자)" 옵션을 선택하는 것입니다.

    사용자 계정 컨트롤 프롬프트에서는 명령 프롬프트를 통해 컴퓨터를 변경할 수 있게 하려는지를 확인합니다. 이 점을 승인하면 명령 프롬프트 창이 열립니다.

  • Internet Explorer 개발자 채널 설치 프로그램에서 WebDriver 라이브러리를 둔 위치로 이동합니다.

    cd C:\Program Files\Common Files\IEDCWebDriver

  • IEDCWebDriver.dll 파일을 등록합니다.

    regsvr32 IEDCWebDriver.dll

  • Internet Explorer 개발자 채널을 엽니다. 도구 메뉴에서 인터넷 옵션을 열고 보안 탭을 선택한 다음 탭의 하단 부분에서 보호 모드 사용 옆의 확인란을 선택합니다. 인터넷로컬 인트라넷 영역 모두에 대해 이 작업을 수행합니다. 새로운 설정을 적용합니다.

Internet Explorer 개발자 채널에서 WebDriver를 사용하지 않게 설정하는 방법은 무엇인가요?

위의 지침에 따르되 보호 모드 사용 옆의 상자는 지우고 라이브러리의 등록은 취소합니다.

regsvr32 /u IEDCWebDriver.dll

Internet Explorer 개발자 채널을 통해 WebDriver 앱 실행

WebDriver를 대상으로 하는 컴파일된 앱을 실행하려는 경우 적절하게 Internet Explorer 개발자 채널을 대상으로 하도록 런타임 시 특수 GUID로 appvve 플래그를 제공해야 합니다.

32비트 및 64비트 버전의 Internet Explorer 개발자 채널을 위한 개별 GUID가 있습니다.

  • 32비트 GUID: 9BD02EED-6C11-4FF0-8A3E-0B4733EE86A1_681E2361-2C6F-4D47-A8B7-D3F7B288CB45
  • 64비트 GUID: 9BD02EED-6C11-4FF0-8A3E-0B4733EE86A1_6A0357B5-AB99-4856-8A59-CF2C38579E78

예를 들어, 앱의 이름이 WDApp.exe(으)로 지정되고 32비트 Internet Explorer 개발자 채널을 실행 중인 경우 다음을 사용하여 명령줄에서 실행해야 합니다.

WDApp.exe /appvve 9BD02EED-6C11-4FF0-8A3E-0B4733EE86A1_681E2361-2C6F-4D47-A8B7-D3F7B288CB45.

자동으로 실행하는 방법은 파일 관리자에서 앱을 마우스 오른쪽 단추로 클릭하고 바로 가기 만들기를 선택한 다음 결과적으로 생성되는 바로 가기 항목을 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 속성 창에서 바로 가기 탭을 선택합니다.

대상 필드에 따옴표로 묶인 앱의 경로가 표시됩니다. 따옴표 안에 /appvve 플래그와 GUID를 추가하고 변경을 적용합니다. 바로 가기를 사용하면 매번 추가되는 플래그로 앱을 실행합니다.

중요  

위에 언급된 GUID는 Internet Explorer 개발자 채널의 첫 번째 릴리스용입니다. GUID는 릴리스마다 변경되므로 이 릴리스에 대해 작성된 앱을 새로운 릴리스로 테스트하는 경우 해당 버전의 문서에서 올바른 GUID를 확인합니다.

중요  

플래그와 GUID는 WebDriver C# 샘플 프로젝트의 설정에 기본으로 제공됩니다. Visual Studio에서는 디버깅 세션을 시작할 때 이 플래그와 GUID를 런타임 플래그로 자동으로 적용하지만 Visual Studio는 컴파일된 앱에 기본으로 제공되지 않습니다.

중요  

WebDriver 응용 프로그램을 실행하려는 플랫폼에 적절한 GUID를 사용해야 할 뿐 아니라 해당 플랫폼에 맞게 응용 프로그램을 컴파일해야 합니다. Windows 8.1을 실행 중인 대부분의 사용자는 64비트 아키텍처를 실행 중이므로 아래 설명한 WebDriver C# 샘플 프로젝트는 64비트에 맞게 구성됩니다. 32비트로 변경하려면 Visual Studio의 빌드 메뉴를 열고 구성 관리자를 선택한 다음 플랫폼 드롭다운 메뉴에서 "x86"을 선택합니다.

WebDriver 사용

경고  이 경우 일부 프로그래밍 지식이 필요하므로 현재로서는 Visual Studio의 C#을 위한 지침만 제공합니다. Visual Studio가 없는 경우 무료 Microsoft Visual Studio Express 2013 for Windows Desktop을 사용하여 샘플 프로젝트를 시험하고 일부 테스트를 작성할 수 있습니다.

Internet Explorer 개발자 채널에서 WebDriver를 구현하려면 수신되는 명령과 출력되는 결과를 마샬링하는 COM 개체를 빌드해야 합니다. 명령과 응답은 모두 JSON으로 포맷됩니다.

먼저 WebDriver C# 샘플 프로젝트를 다운로드합니다. 그러면 구현된 COM 개체와 WebDriver 인터페이스를 통해 브라우저와 통신하는 샘플이 제공됩니다.

Visual Studio를 사용하여 IEWebDriverExample.sln 파일을 열고 IEWebDriverSample.cs 코드 파일을 엽니다.

Visual Studio 솔루션 탐색기의 iewebdriversample.cs 파일

데모를 실행하려면 디버그 메뉴에서 디버깅하지 않고 시작(CTRL + F5)을 선택합니다. 두 가지 중요한 사항이 발생합니다. 전송된 명령과 수신된 응답을 표시하는 콘솔 창이 열립니다. 명령을 실행하도록 Internet Explorer 창이 열립니다.

디버깅 시작(F5)도 선택할 수 있지만 모든 작업이 정상적으로 이루어지는 경우 명령과 응답을 보기 전에 콘솔 창이 사라집니다. 그러나 오류로 인해 스크립트가 완료되지 못하는 경우에는 콘솔 창이 그대로 표시됩니다.

세션 설정

임의 순서의 WebDriver 명령은 newSession 명령으로 세션을 설정하여 시작해야 합니다. 그러면 브라우저 창이 열리고 인터페이스가 설정되어 세션 핸들을 반환하므로 해당 세션에서 추가 명령을 대상으로 할 수 있습니다. 이와 같은 작업을 수행하는 코드를 살펴보겠습니다.

//Execute a "newSession" command
const string newSessionCommand = @"
{
  ""command"": {
    ""name"": ""newSession"",
    ""parameters"": {
      ""desiredCapabilities"": {},
      ""requiredCapabilities"": {}
    },
  ""sessionId"": null
  }
}";
strResponse = ExecuteCommand(newSessionCommand, null);

C#으로 다중 선 문자열 리터럴을 정의하는 기능인 추가 따옴표 외에도 이 JSON 형식은 눈에 매우 익습니다.

모든 명령은 command 개체를 포함하는 JavaScript 개체 리터럴을 작성하여 시작합니다. command 개체에서 실행할 명령의 name을(를) 문자열로, parameters을(를) 개체로, sessionId을(를) 문자열로 제공합니다. 이 경우 sessionId이(가) 아직 설정되지 않았으므로 값은 Null입니다. sessionId이(가) 응답으로 반환되며 다음과 같이 표시됩니다.

{
  "response":{
    "sessionId":"[session identifier]",
    "status":"success",
    "value":{
      "browserName":"Internet Explorer", 
      "browserVersion":"11",
      "platformName":"windows",
      "platformVersion":"8.1",
      "secureSsl":true,
      "takesElementScreenshot":true,
      "takesScreenshot":true,
      "-ms-requireWindowFocus":true
    }
  }
}

value 개체를 통해 시스템에서 스크린샷을 작성할 수 있는지 아니면 SSL을 처리할 수 있는지 등의 특정 브라우저 속성과 특정 기능을 표시합니다. Internet Explorer용 WebDriver 개발의 이 단계에서 newSession 명령으로 설정할 수 있는 유일한 기능은 -ms-requireWindowFocus입니다. true(으)로 설정하면 명령을 실행할 때마다 데스크톱에서 세션의 브라우저 창에 중점을 두게 됩니다. false(으)로 설정하면 브라우저에서 모든 명령을 백그라운드로 실행할 수 있습니다.

브라우저에 명령 전송

샘플 프로젝트에서는 응답에서 sessionId을(를) 추출하여 다음과 같은 모든 후속 명령에서 사용합니다.

  • Bing.com을 로드합니다.
  • 입력된 검색어를 찾습니다.
  • 용어를 키 입력한 다음에 ENTER 키를 눌러 검색을 실행합니다.

브라우저에 새로운 URL을 로드하는 명령은 get입니다.

const string getCommand = @"
{
  ""command"": {
    ""name"": ""get"",
    ""parameters"": {
      ""url"": ""https://bing.com""
    },
    ""sessionId"": ""{sessionId}""
  }
}";

매개 변수는 URL뿐입니다. 작성 시 기본 제공된 WebDriver가 페이지에 로드될 때까지 대기하느라 일시 중지되지 않으므로, 계속하기 전에 페이지가 로드되었는지 확인하기 위해 샘플 스크립트에서 executeScript 명령을 사용하여 20초 동안 1초마다 페이지를 폴링합니다(샘플의 WaitForPageToLoad() 메서드 참조).

그런 다음 스크립트에서는 Bing의 입력 필드에서 검색어를 찾습니다.

const string findElementCommand = @"
{
  ""command"": {
    ""name"": ""findElement"",
    ""parameters"": {
      ""locator"": ""css selector"",
      ""value"": ""input[name=q]""
      },
    ""sessionId"": ""{sessionId}""
  }
}";

findElement 명령은 나중에 명령을 실행할 때 대상으로 지정할 수 있도록 매개 변수와 일치하는 첫 번째 요소 및 공유 ID를 반환합니다. 매개 변수와 일치하는 모든 요소의 배열을 원하는 경우 findElements을(를) 사용합니다.

findElementfindElements의 매개 변수는 일치 유형을 정의하는 locator 및 일치 대상을 정의하는 value입니다. 이 경우 name(으)로 "q"를 사용하여 input 요소를 일치시키기 위해 CSS 선택기를 사용합니다.

현재 사용 가능한 기타 로케이터 유형은 다음과 같습니다.

  • id - 정확히 일치하는 요소의 id 특성.
  • 링크 텍스트 - value 매개 변수의 정확한 텍스트와 일치하는 링크.
  • 부분 링크 텍스트 - 텍스트 value 매개 변수를 포함하는 모든 링크.

샘플 스크립트에서 보내는 마지막 명령은 sendKeys입니다.

const string sendKeysCommand = @"
{
  ""command"": {
    ""name"": ""sendKeys"",
    ""parameters"": {
      ""id"": ""{elementId}"",
      ""keysToSend"": [""W"", ""e"", ""b"", ""D"", ""r"", ""i"", ""v"", ""e"", ""r"", ""\uE007""]
      },
    ""sessionId"": ""{sessionId}""
  }
}";

이 명령에서 id 매개 변수는 findElement 명령에 대한 응답으로 반환된 값입니다. keysToSend 매개 변수에는 10개의 키 입력 배열이 포함됩니다. 즉, "WebDriver"와 ENTER의 문자 유형 코드입니다.

모든 작업이 제대로 수행되면 newSession 명령을 실행한 결과 열린 브라우저 창에 이제 "WebDriver"에 대한 Bing.com의 검색 결과가 표시됩니다.

이때 샘플이 종료되지만, 두 개의 논리적 다음 단계로서 takeScreenshot 명령을 사용하는 경우와 close 세션을 사용하는 경우의 스크린샷을 작성할 수 있습니다.

다음 단계는 무엇인가요?

이제 WebDriver를 통해 Internet Explorer 개발자 채널을 제어하는 방법을 배웠으므로 지원되는 WebDriver 명령의 전체 목록을 살펴보세요. 시험을 마친 후 Microsoft Connect로 이동하여 피드백을 주세요. 버그 보고서를 보내주시기 바라며 특별히 도움이 되었던 사항이 있는 경우 알려주시면 감사드리겠습니다.

관련 항목

WebDriver API 참조서

IIEWebDriverManager

Windows 8.1용 Internet Explorer 개발자 채널 다운로드

Windows 7 SP1용 Internet Explorer 개발자 채널 다운로드