.NET 환경에서 Selenium으로 모바일 화면을 테스트할 때는 실제 기기 대신 크롬의 모바일 에뮬레이션을 많이 씁니다. ChromeOptions.EnableMobileEmulation 에 기기 이름 하나만 넘기면 화면 크기, 픽셀 비율, User-Agent 가 그 기기 설정으로 한 번에 맞춰져서 편하죠. 그런데 이 방식은 크롬 개발자 도구에 등록된 기본 방향, 즉 세로 모드로만 열립니다. 테스트 도중 화면을 돌리는 명령도 크롬 에뮬레이션에는 따로 없어서, 가로 모드를 보려면 처음부터 가로 크기로 기기 설정을 만들어 넣어야 합니다.
기기 이름으로 여는 기본 형태
세로 모드는 이 정도로 끝납니다. "Apple iPhone 6" 처럼 크롬이 알고 있는 기기 이름을 문자열로 넘기는 방식입니다.
ChromeOptions chromeCapabilities = new ChromeOptions();
chromeCapabilities.EnableMobileEmulation("Apple iPhone 6");
ChromeDriverService service = ChromeDriverService.CreateDefaultService(@"C:\chromedriver");
IWebDriver driver = new ChromeDriver(service, chromeCapabilities);
driver.Navigate().GoToUrl("www.google.com");
기기 이름은 크롬 버전에 따라 목록이 바뀝니다. 이름이 목록에 없으면 드라이버를 띄우는 단계에서 오류가 나니, 개발자 도구의 기기 선택 목록에 실제로 있는 이름인지 먼저 확인하는 게 좋습니다.
가로 모드는 크기를 직접 지정
기기 이름 대신 ChromeMobileEmulationDeviceSettings 객체를 만들어 넘기면 폭·높이·픽셀 비율·User-Agent 를 하나하나 정할 수 있습니다. 가로 모드는 결국 폭과 높이를 서로 바꿔 넣은 설정입니다.
ChromeMobileEmulationDeviceSettings CMEDS = new ChromeMobileEmulationDeviceSettings();
CMEDS.Width = 66;
CMEDS.Height = 37;
CMEDS.PixelRatio = 1.0;
CMEDS.UserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25";
ChromeOptions chromeCapabilities = new ChromeOptions();
chromeCapabilities.EnableMobileEmulation(CMEDS);
ChromeDriverService service = ChromeDriverService.CreateDefaultService(@"C:\chromedriver");
IWebDriver driver = new ChromeDriver(service, chromeCapabilities);
driver.Navigate().GoToUrl("www.google.com");
원래 질문에서는 이렇게 했더니 크기 제한 없이 보통 브라우저처럼 열렸다고 했습니다. 해결된 답은 원문에 없었기 때문에, 코드에서 보이는 의심 지점만 적어 둡니다.
막혔을 때 확인할 점
첫째, Width = 66, Height = 37 은 픽셀 단위로 보면 지나치게 작은 값입니다. 아이폰 6의 CSS 화면 크기가 375×667 이니, 가로 모드를 의도했다면 667×375 를 넣으려다 자릿수가 빠진 것으로 보입니다. 이런 비정상적인 크기면 화면이 제대로 표시되지 않을 수 있으니 실제 기기 해상도에 맞춰 넣어 보세요. 아이폰 6의 픽셀 비율도 1.0 이 아니라 2 쪽이 실제에 가깝습니다.
둘째, 모바일 에뮬레이션은 페이지 안쪽의 보이는 영역(뷰포트)을 흉내 내는 기능이지 브라우저 창 크기를 줄이는 기능이 아닙니다. 그래서 창 자체는 평소 크기로 열리고, 그 안의 페이지가 모바일 크기로 그려지는 게 정상입니다. "크기 제한 없이 열렸다"는 게 창 크기 이야기라면 에뮬레이션은 적용됐을 수도 있으니, 페이지에서 window.innerWidth 를 찍어 보면 바로 구분됩니다.
셋째, GoToUrl("www.google.com") 처럼 https:// 없이 주소를 넘기면 드라이버 버전에 따라 잘못된 인수 오류가 날 수 있습니다. 주소는 스킴까지 붙여서 넘기는 습관을 들이는 게 안전합니다.
테스트 중에 가로·세로를 바꿔 가며 확인하고 싶다면, 지금 구조에서는 방향별로 설정을 따로 만들어 드라이버를 새로 띄우는 방법이 가장 단순합니다. 같은 테스트를 두 설정으로 한 번씩 돌리도록 매개변수화해 두면 관리도 편합니다.