본문으로 바로가기

인터넷 익스플로러 드라이버 & Selenium

category 유용한 것 2020. 1. 8. 22:04
반응형

인터넷 익스플로러 드라이버

InternetExplorerDriver는 WebDriver의 유선 프로토콜을 구현하는 독립형 서버입니다. 이 드라이버는 Vista, Windows 7, Windows 8 및 Windows 8.1의 적절한 조합에서 IE 7, 8, 9, 10 및 11에서 테스트되었습니다. 2014 년 4 월 15 일부터 IE 6은 더 이상 지원되지 않습니다.

드라이버는 32 비트 및 64 비트 버전의 브라우저 실행을 지원합니다. 브라우저를 시작할 때 사용할 "비트 단위"를 결정하는 방법의 선택은 시작된 IEDriverServer.exe 버전에 따라 다릅니다. 32 비트 버전의 IEDriverServer.exe가 시작되면 32 비트 버전의 IE가 시작됩니다. 마찬가지로 64 비트 버전의 IEDriverServer.exe가 시작되면 64 비트 버전의 IE가 시작됩니다.

 설치

InternetExplorerDriver를 사용하기 전에 설치 프로그램을 실행할 필요는 없지만 일부 구성이 필요합니다. 독립형 서버 실행 파일은 다운로드 페이지에서 다운로드 하여 PATH에 배치해야합니다.

 찬성

  • 실제 브라우저에서 실행되며 Javascript를 지원합니다

 단점

  • InternetExplorerDriver는 Windows에서만 작동합니다.
  • 비교적 느리다 (아직도 꽤 빠르지 만 :)

 명령 줄 스위치

독립 실행 형 실행 파일로서 다양한 명령 줄 인수를 통해 IE 드라이버의 동작을 수정할 수 있습니다. 이러한 명령 행 인수의 값을 설정하려면 사용중인 언어 바인딩에 대한 문서를 참조하십시오. 지원되는 명령 행 스위치는 아래 표에 설명되어 있습니다. 모든 <switch> ,- <switch> 및 / <switch> 가 지원됩니다.

스위치의미
--port = <portNumber>IE 드라이버의 HTTP 서버가 언어 바인딩의 명령을 청취 할 포트를 지정합니다. 기본값은 5555입니다.
--host = <hostAdapterIPAddress>IE 드라이버의 HTTP 서버가 언어 바인딩의 명령을 청취 할 호스트 어댑터의 IP 주소를 지정합니다. 기본값은 127.0.0.1입니다.
--log-level = <logLevel>로깅 메시지가 출력되는 레벨을 지정합니다. 유효한 값은 FATAL, ERROR, WARN, INFO, DEBUG 및 TRACE입니다. 기본값은 치명적입니다.
--log-file = <logFile>로그 파일의 전체 경로와 파일 이름을 지정합니다. 기본값은 stdout입니다.
--extract-path = <path>서버가 사용하는 지원 파일을 추출하는 데 사용되는 디렉토리의 전체 경로를 지정합니다. 지정되지 않은 경우 기본값은 TEMP 디렉토리입니다.
--조용한서버가 시작될 때 진단 출력을 억제합니다.

 중요한 시스템 속성

InternetExplorerDriver는 다음 시스템 특성 ( System.getProperty() 사용하여 읽고 Java 코드 또는 " -DpropertyName=value "명령 행 플래그에서 System.setProperty() 을 사용하여 설정)을 사용합니다.

특성무슨 의미
webdriver.ie.driverIE 드라이버 바이너리의 위치입니다.
webdriver.ie.driver.hostIE 드라이버가 청취 할 호스트 어댑터의 IP 주소를 지정합니다.
webdriver.ie.driver.loglevel로깅 메시지가 출력되는 레벨을 지정합니다. 유효한 값은 FATAL, ERROR, WARN, INFO, DEBUG 및 TRACE입니다. 기본값은 치명적입니다.
webdriver.ie.driver.logfile로그 파일의 전체 경로와 파일 이름을 지정합니다.
webdriver.ie.driver.silentIE 드라이버가 시작될 때 진단 출력을 억제합니다.
webdriver.ie.driver.extractpath서버가 사용하는 지원 파일을 추출하는 데 사용되는 디렉토리의 전체 경로를 지정합니다. 지정되지 않은 경우 기본값은 TEMP 디렉토리입니다.

 필수 구성

  • IEDriverServer 실행 파일을 다운로드 하여 PATH에 배치해야합니다.
  • Windows Vista 또는 Windows 7의 IE 7 이상에서는 각 영역의 보호 모드 설정을 동일한 값으로 설정해야합니다. 모든 구역에 대해 동일하다면 값을 켜거나 끌 수 있습니다. 보호 모드 설정을 지정하려면 도구 메뉴에서 "인터넷 옵션 ..."을 선택하고 보안 탭을 클릭하십시오. 각 영역마다 탭 하단에 "보호 모드 사용"이라는 확인란이 있습니다.
  • 또한 IE 10 이상에서는 "확장 보호 모드"를 비활성화해야합니다. 이 옵션은 인터넷 옵션 대화 상자의 고급 탭에 있습니다.
  • 기본 마우스 이벤트가 올바른 좌표로 설정 될 수 있도록 브라우저 확대 / 축소 수준을 100 %로 설정해야합니다.
  • Windows 10의 경우 디스플레이 설정에서 "텍스트, 앱 및 기타 항목의 크기 변경"을 100 %로 설정해야합니다.
  • IE 11의 경우에만 대상 컴퓨터에서 레지스트리 항목을 설정하여 드라이버가 작성한 Internet Explorer 인스턴스에 대한 연결을 유지할 수 있도록해야합니다. 32 비트 Windows 설치의 경우 레지스트리 편집기에서 검사해야하는 키는 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE 입니다. 64 비트 Windows 설치의 경우 키는 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE 입니다. FEATURE_BFCACHE 하위 키가있을 수도 있고 없을 수도 있으며 존재하지 않을 경우 만들어야합니다. 중요 사항 : 이 키 내에 iexplore.exe 라는 DWORD 값을 0으로 작성하십시오.

 기본 이벤트 및 Internet Explorer

InternetExplorerDriver는 Windows 전용이므로 브라우저에서 마우스 및 키보드 작업을 수행하기 위해 소위 "기본"또는 OS 수준 이벤트를 사용하려고 시도합니다. 이는 동일한 작업에 시뮬레이션 된 JavaScript 이벤트를 사용하는 것과 대조적입니다. 기본 이벤트를 사용하면 JavaScript 샌드 박스에 의존하지 않고 브라우저 내에서 JavaScript 이벤트가 올바르게 전파된다는 장점이 있습니다. 그러나 현재 IE 브라우저 창에 포커스가없는 경우와 요소 위로 마우스를 가져 가려고 할 때 마우스 이벤트에 일부 문제가 있습니다.

 브라우저 포커스

문제는 창 자체에 포커스가 없으면 IE 자체가 IE 브라우저 창 (WM_MOUSEDOWN 및 WM_MOUSEUP)을 보내는 Windows 메시지를 완전히 존중하지 않는 것 같습니다. 특히, 클릭되는 요소는 그 주위에 포커스 창을 받지만 요소에 의해 클릭이 처리되지 않습니다. 틀림없이, 우리는 전혀 메시지를 보내지 않아야합니다. 대신 SendInput () API를 사용해야하지만 해당 API를 사용하려면 창에 포커스가 있어야합니다. WebDriver 프로젝트와 두 가지 상충되는 목표가 있습니다.

먼저, 사용자를 최대한 가깝게 모방하려고 노력합니다. 이는 JavaScript를 사용하여 이벤트를 시뮬레이션하는 대신 기본 이벤트를 사용하는 것을 의미합니다.

둘째, 자동화되는 브라우저 창의 초점을 필요로하지 않기를 원합니다. 이것은 브라우저 창을 포 그라운드로 강제하는 것이 차선 책임을 의미합니다.

추가로 고려해야 할 사항은 여러 WebDriver 인스턴스에서 여러 개의 IE 인스턴스가 실행될 가능성입니다. 즉, "창을 전경으로 가져 오는"솔루션은 IE 드라이버의 C ++ 코드 내에서 일종의 동기화 구성 (mutex?)으로 랩핑되어야합니다. . 그럼에도 불구하고,이 코드는 예를 들어, 사용자가 IE를 포 그라운드로 가져오고 네이티브 이벤트를 실행하는 드라이버 사이에 다른 창을 포 그라운드로 가져 오는 경우에도 여전히 경쟁 조건에 종속됩니다.

운전자의 요구 사항과이 두 가지 상충되는 목표의 우선 순위를 정하는 방법에 대한 논의가 진행 중입니다. 현재 널리 퍼져있는 지혜는 전자를 후자보다 우선시하고 IE 드라이버를 사용할 때 다른 작업을 수행 할 수 없다는 것을 문서화하는 것입니다. 그러나 그 결정은 아직 완료되지 않았으며이를 구현하는 코드는 다소 복잡 할 수 있습니다.

 요소 위로 가져 가기

요소 위로 마우스를 가져 가려고 할 때 실제 마우스 커서가 IE 브라우저 창의 경계 안에 있으면 호버가 작동하지 않습니다. 더 구체적으로 말하면, 호버가 1 초 동안 작동 한 것처럼 보이고 요소는 이전 상태로 되돌아갑니다. 이것이 발생하는 주된 이론은 IE가 이벤트 루프 중에 어떤 종류의 적중 테스트를 수행하여 물리적 커서가 창 경계 내에있을 때 물리적 마우스 위치에 응답한다는 것입니다. WebDriver 개발 팀이 IE의이 동작에 대한 해결 방법을 찾지 못했습니다.

 <option> 요소 클릭 또는 양식 제출 및 alert ()

IE 드라이버가 기본 이벤트를 사용하여 요소와 상호 작용하지 않는 두 곳이 있습니다. 이것은 <select> 요소 내의 <option> 요소를 클릭하는 것입니다. 일반적인 상황에서 IE 드라이버는 일반적으로 JavaScript getBoundingClientRect () 메소드에 의해 리턴되는 요소의 위치와 크기에 따라 클릭 위치를 계산합니다. 그러나 <option> 요소의 경우 getBoundingClientRect ()는 위치가 0이고 크기가 0 인 사각형을 반환합니다. IE 드라이버는 기본적으로 요소의 .selected 속성을 설정하고 JavaScript에서 onChange 이벤트를 시뮬레이션하는 click () Automation Atom을 사용하여이 한 가지 시나리오를 처리합니다. 그러나 <select> 요소의 onChange 이벤트에 alert (), confirm () 또는 prompt ()를 호출하는 JavaScript 코드가 포함되어 있으면 모달 대화 상자를 수동으로 닫을 때까지 WebElement의 click () 메소드를 호출하면 중지됩니다. WebDriver 코드 만 사용하여이 동작에 대한 알려진 해결 방법은 없습니다.

마찬가지로 WebElement의 submit () 메소드를 통해 HTML 양식을 제출하는 경우에도 동일한 효과가있을 수 있습니다. 드라이버가 양식에서 JavaScript submit () 함수를 호출하고 JavaScript alert (), confirm () 또는 prompt () 함수를 호출하는 onSubmit 이벤트 핸들러가있는 경우 발생할 수 있습니다.

이 제한은 3508 호 (Google 코드)로 제기되었습니다.

 InternetExplorerDriver의 여러 인스턴스

IEDriverServer.exe를 만들면 InternetExplorerDriver의 여러 동시 인스턴스를 만들고 사용할 수 있어야합니다. 그러나이 기능은 대부분 테스트되지 않았으며 쿠키, 창 포커스 등에 문제가있을 수 있습니다. IE 드라이버의 여러 인스턴스를 사용하려고 할 때 이러한 문제가 발생하면 RemoteWebDriver 및 가상 컴퓨터 사용을 고려하십시오.

여러 InternetExplorer 인스턴스간에 공유되는 쿠키 (및 다른 세션 항목) 문제에 대한 두 가지 솔루션이 있습니다.

첫 번째는 InternetExplorer를 개인 모드로 시작하는 것입니다. 그 후 InternetExplorer는 깨끗한 세션 데이터로 시작되며 변경된 세션 데이터를 종료 할 때 저장하지 않습니다. 그렇게하려면 두 가지 특정 기능을 드라이버에 전달해야합니다. ie.forceCreateProcessApi , true 값을 가진 ie.browserCommandLineSwitches 및 -private 값을 가진 ie.browserCommandLineSwitches . InternetExplorer 8 이상에서만 작동하며 Windows Registry HKLM_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main 경로에는 0 값의 TabProcGrowth 키가 포함되어야합니다.

두 번째는 InternetExplorer를 시작하는 동안 세션을 정리하는 것입니다. 이를 위해 특정 ie.ensureCleanSession 기능을 드라이버에 전달해야합니다. 이렇게하면 수동으로 시작한 인스턴스를 포함하여 실행중인 모든 InternetExplorer 인스턴스의 캐시가 지워집니다.

 원격으로 IEDriverServer.exe 실행

IEDriverServer.exe에 의해 시작된 HTTP 서버는 액세스 제어 목록을 설정하여 로컬 시스템의 연결 만 수락하고 원격 시스템의 들어오는 연결을 허용하지 않습니다. 현재는 소스 코드를 IEDriverServer.exe로 수정하지 않으면 변경할 수 없습니다. 원격 시스템에서 Internet Explorer 드라이버를 실행하려면 언어 바인딩의 RemoteWebDriver에 해당하는 Java 독립형 원격 서버를 사용하십시오.

 Windows 서비스에서 IEDriverServer.exe 실행

Windows 서비스 응용 프로그램의 일부로 IEDriverServer.exe를 사용하려는 시도는 명시 적으로 지원되지 않습니다. 서비스 프로세스 및 해당 프로세스가 생성 한 프로세스에는 일반 사용자 컨텍스트에서 실행되는 프로세스와 훨씬 다른 요구 사항이 있습니다. IEDriverServer.exe는 해당 환경에서 명시 적으로 테스트를 거치지 않았으며 서비스 프로세스에서 사용이 금지 된 것으로 문서화 된 Windows API 호출을 포함합니다. 서비스 프로세스에서 실행하는 동안 IE 드라이버를 작동시킬 수는 있지만 해당 환경에서 문제가 발생한 사용자는 자신의 솔루션을 찾아야합니다.

반응형