Selenium을 사용하여 Windows 11의 Microsoft Edge에서 IE 모드 자동화

6288 단어 seleniumiedrive

소개



현재 안정적인 최신 버전의 Windows OS(이 기사 작성 시점을 기준으로 Windows 11임)는 더 이상 독립 실행형 응용 프로그램으로 Internet Explorer를 지원하지 않습니다.

그러나 Internet Explorer는 아직 죽지 않았습니다.

Internet Explorer는 Microsoft Edge 브라우저에서 "IE 모드"로 여전히 살아 있습니다.

따라서 Internet Explorer 드라이버를 사용하는 "Selenium"에 의한 E2E 테스트를 위해 Microsoft Edge에서 IE 모드를 자동화할 가치가 여전히 있습니다.

Microsoft Edge에서 IE 모드 자동화에 대한 공식 Microsoft 설명서도 있습니다.

https://docs.microsoft.com/en-us/microsoft-edge/webdriver-chromium/ie-mode

경우에 따라 공식 문서로는 충분하지 않습니다...



그러나 경우에 따라 공식 문서의 단계를 확실히 따르더라도 Selenium을 통해 Microsoft Edge 브라우저에서 IE 모드를 자동화할 때 런타임 오류가 발생할 수 있습니다.

제 경우에는 Windows 11에서 C#과 함께 Selenium .NET 바인딩을 사용하고 있었는데 제대로 작동하려면 다음 목록과 같이 두 단계를 추가로 수행해야 했습니다.
  • IgnoreZoomLevel 객체의 InternetExplorerOptions 속성을 true 로 설정합니다.
  • 모든 영역에 대해 Turn on Protected Mode 로컬 그룹 정책을 Enable로 설정합니다.

  • 이 기사의 다음 섹션에서 위의 내용에 대해 자세히 설명하겠습니다.

    확대/축소 수준 무시



    처음에 제가 작성한 C# 코드는 아래와 같았습니다.

    var driver = new InternetExplorerDriver(new InternetExplorerOptions {
      AttachToEdgeChrome = true,
      EdgeExecutablePath = "C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"
    });
    ...
    


    위의 C# 코드는 공식 문서의 코드와 동일합니다.

    하지만 안타깝게도 오류가 발생했습니다.

    위에서 언급했듯이 Selenium .NET 바인딩을 사용하고 있었기 때문에 아래와 같이 내 애플리케이션의 콘솔에 처리되지 않은 예외 메시지가 표시되었습니다.

    Started InternetExplorerDriver server (32-bit)
    4.0.0.0
    Listening on port 54479
    Only local connections are allowed
    
    Unhandled exception. 
    System.InvalidOperationException: 
    Unexpected error launching Internet Explorer. 
    Browser zoom level was set to 175%. It should be set to 100% (SessionNotCreated)
    


    예외 메시지는 "브라우저의 확대/축소 수준이 100%여야 하는데 그렇지 않았습니다"라고 했습니다.

    하지만 저는 확대/축소 수준을 변경한 적이 없으며 Edge 브라우저 확대/축소 수준은 당시 메뉴에서 100%로 표시되었습니다.

    그래서 결국 Selenium이 확대/축소 수준을 강제로 무시하도록 하기로 했습니다.

    우리는 IgnoreZoomLevel 개체의 InternetExplorerOptions 속성을 true 로 사용하여 이를 수행할 수 있습니다.

    var driver = new InternetExplorerDriver(new InternetExplorerOptions {
      AttachToEdgeChrome = true,
      EdgeExecutablePath = "C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe",
      IgnoreZoomLevel = true // 👈 Added this line.
    });
    ...
    


    IE의 "보호 모드"를 켜십시오... Windows 11에서!



    불행히도 위의 첫 번째 오류를 피했지만 두 번째 오류가 발생했습니다.

    콘솔에 아래와 같은 오류 메시지가 표시되었습니다.

    Started InternetExplorerDriver server (32-bit)
    4.0.0.0
    Listening on port 56568
    Only local connections are allowed
    
    Unhandled exception. 
    OpenQA.Selenium.WebDriverException: 
    The HTTP request to the remote WebDriver server for URL http://localhost:56568/session/c81cd23a-2f60-45ae-9636-ebd27fea9c22/url timed out after 60 seconds.
     ---> System.Threading.Tasks.TaskCanceledException: 
     The request was canceled due to the configured HttpClient.Timeout of 60 seconds elapsing.
     ---> System.TimeoutException: The operation was canceled.
    


    오류 메시지는 브라우저 작동 시간이 초과되었다고 말했습니다.
    그리고 그 오류 메시지를 보았을 때 나는 그 오류가 IE의 "보호 모드"구성과 관련이 있을 수 있다는 것을 즉시 상기했습니다.

    즉, IE를 자동화하기 전에 모든 영역에 대해 IE의 "보호 모드"구성을 "활성화"로 설정해야 합니다.

    해당 요구 사항은 Selenium의 공식 문서에도 언급되어 있습니다.

    https://www.selenium.dev/documentation/ie_driver_server/#required-configuration

    you must set the Protected Mode settings for each zone to be the same value.



    따라서 IE의 "보호 모드"를 활성화하기 위해 서둘러 제어판에서 "인터넷 속성"대화 상자를 열었습니다.
    그러나 "보호 모드 사용"확인란이 대화 상자에 없었습니다... Windows 11이기 때문입니다!



    나는 한동안 혼란 속에 서 있었지만, 이 문제를 해결하기 위해 정신을 차리고 인터넷에서 검색하기 시작했습니다.

    얼마 지나지 않아 다행히 아래 2016년에 쓴 글에서 답을 찾았다.

    https://www.urtech.ca/2016/01/solved-how-to-disable-protected-mode-in-internet-explorer-using-gpo/

    실제로 로컬 그룹 정책으로 IE의 "보호 모드"를 제어할 수 있습니다.

    그래서 그룹 정책 편집기( gpedit.msc )를 열고 모든 영역의 "보호 모드"정책을 "활성화"로 설정한 다음 gpupdate /force 명령을 수행하여 즉시 적용했습니다.



    모든 작업을 수행한 후 Microsoft Edge에서 IE 모드를 자동화하는 C# 코드가 제대로 작동하기 시작했습니다. 🎉

    결론



    이 기사가 Microsoft Edge에서 Selenium 및 IE 드라이버로 IE 모드를 자동화해야 하는 개발자의 시간을 절약할 수 있기를 바랍니다.

    배우고, 연습하고, 공유하십시오. :)

    좋은 웹페이지 즐겨찾기