У меня есть кнопка печати в моем приложении. Эта кнопка печати открывает PDF в новом окне. В верхней части этого окна находится значок «Печать», по которому можно щелкнуть, чтобы открыть окно предварительного просмотра печати Chrome, в котором можно выбрать параметр «Сохранить как PDF» для сохранения файла PDF.
Я хотел бы проверить этот поток в селене.
--- Я нажимаю кнопку «Печать» на своей веб-странице. Это открывает новое окно Chrome с PDF
driver.findElement(By.cssSelector("ID")).click();
--- Я переключаюсь на недавно открытое окно Chrome
driver.switchTo().window(driver.getWindowHandles().toArray()[1].toString());
Я вижу в журналах, что селен действительно переключается на новое окно.
--- Я пытаюсь открыть элемент нового Chrome окна
driver.findElement(By.cssSelector("viewer-pdf-toolbar"))
Вот в чем проблема. Selenium не может взаимодействовать с этим недавно открытым окном и не может найти этот элемент. Когда я осматриваю недавно открытое окно, я вижу следующую структуру DOM -
<body>
<viewer-pdf-toolbar id="toolbar"></viewer-pdf-toolbar>
<div id="sizer" style="width: 735px; height: 1092px;"></div>
<viewer-password-screen id="password-screen"></viewer-password-screen>
...
..
.
</div>
Элемент, который я ищу, существует в структуре DOM, и я могу получить к нему доступ через консоль, но не могу получить к нему доступ с помощью Selenium , Вы можете просмотреть эту DOM, открыв любой файл PDF в браузере Chrome и проверив окно. Любые идеи, почему это происходит?
Примечание. Когда загружается новое окно, на секунду или две отображается «Печать, подождите», а затем загружен файл PDF. Не уверен, что эта информация имеет отношение к проблеме здесь.
Дополнительная информация -
В режиме отладки после того, как драйвер переключился на новое окно PDF, которое я оценил - driver.getCurrentUrl()
- этот URL правильный URL-адрес, отображаемый в адресной строке окна предварительного просмотра. Это означает, что мой драйвер находится в правильном окне.
Но когда я выполняю driver.getPageSource
- я получаю следующий вывод
<html>
<head>
</head>
<body style="height: 100%; width: 100%; overflow: hidden; margin:0px; background-color: rgb(82, 86, 89);">
<embed name="XXXXXXD474B71424EC89403FB4FA75CF" style="position:absolute; left: 0; top: 0;" width="100%" height="100%" src="about:blank" type="application/pdf" internalid="XXXXXXD474B71424EC89403FB4FA75CF"></body>
</html>
Так что driver
видит это как источник страницы тогда как когда я делаю inspect
в том же окне, я вижу другой DOM. Почему это происходит? Chrome заменяет тег <embed>
окончательным DOM? Как селен может быть осведомлен об этом изменении?
Пожалуйста, помогите!