Подтвердить что ты не робот

Взятие скриншота IE возвращает черное изображение

Я создаю консольное приложение, которое будет подключаться к другим компьютерам в сети и делать скриншоты браузера на веб-странице.
Использование Selenium 2.47.1 для настройки сервера и узлов. Консольное приложение запускается на ПК, который настроен как концентратор селена.
Снимок экрана хорош в firefox, chrome, то есть от компьютера-концентратора.
Снимок экрана также отлично подходит для firefox на удаленном ПК.
Но с IE он возвращает черное изображение.
И хаб, и node компьютеры, работающие на 64-битных 64-битных окнах, имеют IE11. Я использую 64-битный IEDriver на обоих компьютерах. Компьютер node не заблокирован.

using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;

static void Main(string[] args)
 {
   IWebDriver NewDriver = null;
   using (NewDriver = new RemoteWebDriver(new Uri("http://172.165.10.111/wd/hub"), DesiredCapabilities.InternetExplorer()))
    {
      if (NewDriver != null)
       {
         NewDriver.Navigate().GoToUrl("http://www.google.com");
         NewDriver.Manage().Window.Size = new Size(1804, 1096);
         Screenshot ss = ((ITakesScreenshot)NewDriver).GetScreenshot();
         ICapabilities capabilities = ((RemoteWebDriver)NewDriver).Capabilities;
         ss.SaveAsFile(@"C:\Path\123.png", ImageFormat.Png);
         NewDriver.Quit();
       }
    }
 }
4b9b3361

Ответ 1

Это потому, что ваш экран заблокирован или заставка работает.

Вам нужно будет отключить экранную заставку и настроить окна, чтобы никогда не блокировать себя, когда они не используются. Чтобы отключить экранную заставку:

  • Нажмите кнопку "Пуск".
  • Нажмите "Панель управления".
  • В окне поиска введите экранную заставку.
  • Нажмите Включить или отключить экранную заставку.

Затем измените настройки заставки. Убедитесь, что вы сняли флажок "Вкл. Возобновление, экран входа в систему".

Пока вы находитесь в панели управления, возможно, стоит проверить параметры питания и убедиться, что машина не собирается спать или отключается после определенного периода времени.

Вы также захотите использовать VNC или удаленную помощь для доступа к графическому интерфейсу. Если вы RDP в нем заблокируете экран для локального пользователя, который в настоящий момент вошел в систему, и снова он заблокирует экран при отключении.

Наконец, не используйте 64-битный IE-драйвер, вы должны использовать 32-битный. Никто не запускает 64-битную версию IE (даже если у них 64-битная машина).

****** Изменить Добавление немного дополнительной информации из достоверного и авторитетного источника ******

Ниже приведена ссылка на сообщение на форуме пользователей Selenium, где Джим Эванс (разработчик, который написал двоичные файлы IEDriver) объясняет это:

http://selenium.10932.n7.nabble.com/IE-Screenshots-are-black-when-not-connected-via-Remote-Desktop-to-the-VM-hosting-an-IE-Node-td37004.html

Эта цитата, в частности, касается снятия скриншотов при отключении от экземпляра RDP:

Это известное ограничение. Неизвестного обходного пути нет. Жаловаться на Microsoft. Это те, которые делают API PrintWindow (который соответствующий API для использования при захвате снимков экрана) ведут себя так. Либо это, либо если вы обнаружите способ заставить его работать, пожалуйста отправить патч.

Он объясняет, как код скриншота работает более подробно в его блоге:

http://jimevansmusic.blogspot.co.uk/2014/09/screenshots-sendkeys-and-sixty-four.html

В частности:

Драйвер IE выполняет скриншоты с помощью функции PrintWindow API. PrintWindow может снимать только снимок экрана с видимой части любого данное окно, что означает, что для получения полноэкранного снимка экрана (в соответствии с требованиями API WebDriver), окно должно быть размером достаточно, чтобы отобразить всю страницу без полос прокрутки. Однако, Windows не позволяет изменять размер окна больше, чем видимое разрешение экрана. Когда мы попросим IE изменить размер, Сообщение WM_GETMINMAXINFO отправляется на событие изменения размера, чтобы IE мог укажите, насколько большим может быть окно. Перехватив это сообщение с помощью крючок и изменение максимальных значений, мы можем обмануть IE, думая, что окно может быть больше, чем разрешение экрана. иначе разрешите.

Ответ 2

Похоже, что это может быть известная проблема с конфигурацией:

https://code.google.com/p/selenium/issues/detail?id=3536

Из того, что было упомянуто выше @ShubhasmitGupta, похоже, что IE-драйвер передает черно-белые снимки экрана, когда рабочий стол заблокирован (я предполагаю, что это связано с тем, что DWM/Explorer не создает окна).

Там обходной путь, связанный с блокировкой целевого компьютера при подключении к нему через RDP. По существу, вы создаете файл disconnect.bat со следующим содержимым:

tscon rdp-tcp#0 /dest:console

Я не уверен точно, когда это должно быть запущено, но концепция заключается в том, чтобы предотвратить блокирование тестового компьютера при подключении через Remote Desktop. Если это помогает, отлично; Я не смог самостоятельно проверить обходной путь и выяснить, как его настроить. Возможно, кто-то еще может написать более сжатый ответ.

Ответ 3

Откройте диспетчер управления службами. Вы можете сделать WindowsKey + R (запустить) и ввести services.msc и нажать <ENTER> и он запустится.

Найдите службу и щелкните ее правой кнопкой мыши и выберите свойства из контекстного меню.

Разрешить службу взаимодействовать с рабочим столом

Теперь выберите вкладку "Вход в систему". Вы хотите убедиться, что флажок установлен для "Разрешить службе взаимодействовать с рабочим столом".

Вы можете увидеть его на изображении ниже.

Примечание. У меня нет этой службы, поэтому я просто выбрал еще одну в образце.

введите описание изображения здесь

Ответ 4

вы можете попробовать удалить нижнюю строку

//NewDriver.Manage().Window.Size = new Size(1804, 1096);

максимизируйте свой браузер.

NewDriver.Manage().Window.Maximize();

Ответ 5

У меня было подозрительное подозрение, что IE некоторое время рендеринга с DirectX и в этой статье, безусловно, указывает на то, что это так... что объясняет, почему у вас возникнут проблемы, поскольку экранирующие экраны GDI не будут работать с поверхностями DirectX.

Я говорю, что это абсолютно... просто догадка

Ответ 6

У меня была такая же проблема некоторое время назад, и хотя я не совсем понимаю проблему, это было в основном тем, что процесс, выполняющий селен, выполнялся под системной учетной записью, и, следовательно, IE gui был виден только в сеансе 0, тогда как сеанс 1 показывал только черный экран.

Решением, которое работало для меня, было создание локальной учетной записи пользователя на удаленном хосте, чтобы этот пользователь был постоянно подписан и разблокирован, чтобы иметь доступный интерактивный рабочий стол, а затем запускайте свои приложения/тесты selenium в качестве этого пользователя. Я знаю, что это не идеально, но поскольку у нас были десятки старых коробок, вокруг не было необходимости использовать их в качестве специализированного тестового сервера. Надеюсь, что это помогает!

Извините, недостаточно rep, чтобы добавить это как комментарий.

Ответ 7

Возможно, интересный намек...

... работа с Selenium 2.47.x и 2.52.0 Jenkins, RDP и IE 11 в режиме IE 7 (настройка по веб-сайту) на сервере Win 2008. Дополнительно к этому у меня есть экраны, подключенные к моему компьютеру.

Если я отключен от Win Server (не выходил из системы), у меня есть две ситуации:

Проигрыватель JAVA на сервере создает черные ящики или реальные экраны. Разница - это всего лишь один маркер в параметрах RDP в части отображения в локальной конфигурации RDP моего клиента (Win 7).

У меня нет англоязычного дисплея, поэтому я надеюсь, что перевод может быть в порядке.

Деталь конфигурации: "использование всех мониторов с помощью удаленного сеанса"

Если этот маркер установлен, я получаю реальные снимки экрана. Если этот не установлен, у меня есть черные ящики. Я не могу объяснить, почему, но он работает таким образом...

Ответ 8

Windows иногда вызывала черные экраны, потому что машина/рабочий стол не использовалась.