web-dev-qa-db-fra.com

ChromeDriver montrant le contexte partagé de l'interface utilisateur perdue

J'ai un ordinateur portable Windows 10 exécutant une machine virtuelle Windows 7. À l'intérieur de la machine virtuelle, lorsque je lance WebDriver, l'erreur gpu_process_transport_factory.cc <1009> du contexte partagé de l'interface utilisateur perdue lors de son démarrage:

IWebDriver driver = new ChromeDriver() //This causes the 1009 Error

 ERROR

Cela varie également pour Impossible d'interroger l'enregistrement stéréo et Impossible d'envoyer GpuChannelMsg_CreateCommandBuffer et command_buffer_proxy_impll.cc <115> Le descripteur de mémoire partagée n'est pas valide.

Cela a été depuis des mois et aucune modification n'a été apportée (ce WebDriver est l'unique fonction de la machine virtuelle), l'ordinateur portable qui l'exécute fonctionne correctement (aucun problème de GPU) . WebDriver continue de naviguer dans les pages, mais génère des erreurs supplémentaires et 10 fois plus lentement.

EDIT: Mis à jour pour ChromeDriver à 2.35 et toujours le même comportement.

9
Tiago

Headless Chrome a été expédié dans Chrome 59 par Google Team qui a présenté un moyen d'exécuter le navigateur Chrome dans un environnement sans tête. _. 

Une note a été ajoutée en tant que:

Headless mode has been available on Mac and Linux since Chrome 59. Windows support came in Chrome 60.

L'article Getting Started with Headless Chrome mentionnait que:

--disable-gpu \                # Temporarily needed if running on Windows.

Une note a été ajoutée en tant que:

À l'heure actuelle, vous voudrez également inclure l'indicateur --disable-gpu si vous utilisez Windows.

Selon la discussion Headless: make --disable-gpu flag unnecessary , il était clair que:

L'indicateur --disable-gpu n'est plus nécessaire sur Linux ou Mac OSX. Cela deviendra également inutile sous Windows dès que le bogue SwiftShader fails an assert on Windows in headless mode sera corrigé.

Que s'est-il passé sous le capot?

Conformément à la discussion headless: Switch from osmesa to SwiftShader lorsque Google/l'équipe Chromium a décidé d'expédier SwiftShader avec Chrome, l'équipe a pensé commencer à l'utiliser pour restituer GL content in Mode sans tête. Cela a nécessité quelques modifications, comme suit:

  • Ignorer la collecte de données GPU en mode sans tête puisque SwiftShader n'est pas considéré comme une implémentation logicielle par ce code, ce qui entraîne un échec lorsque nous avons tenté d'extraire des informations du système Window.
  • Ignorer uniquement GL initialisation dans InitializeStaticEGLInternal si nous avons l'intention d'utiliser osmesa. SwiftShader nécessite une initialisation comme les autres implémentations non logicielles.
  • SwiftShader n'est actuellement pas pris en charge sur Mac OSX. L'équipe a donc décidé de continuer à utiliser le GPU physique en Mode sans tête sur cette plate-forme (contrairement à sur d'autres plates-formes où tout est rendu logiciel).
  • Donc, pour désactiver le support de WebGL en mode sans tête, ils ont décidé d'utiliser --disable-gpu et --disable-software-rasterizer.

L'idée de Support WebGL in headless est toujours en discussion mais SwiftShader fails an assert on Windows in headless mode avec une erreur telle que:

[0117/125830.649194:ERROR:gpu_process_transport_factory.cc(1043)] Lost UI shared context.
DevTools listening on ws://127.0.0.1:37429/devtools/browser/1f0b2bf7-dfdd-44ac-9da7-f2659d352f0d

Conclusion

Cette erreur n'a pas d'incidence sur votre @Test et vous pouvez l'ignorer pour le moment.

7
DebanjanB

Cela semble être un problème avec la dernière version de Chrome (65.0.3325.146). En revenant à une version antérieure de Chrome (64.0.3282.186), le problème a disparu pour moi.

Fera des recherches supplémentaires et mettra à jour ici si je trouve des informations supplémentaires, mais comme solution temporaire, vous pouvez désinstaller Chrome et installer la version 64.0.3282.186.

3
Tim Trewartha

'Lost UI Shared Context' a été pris pour une erreur alors qu'il s'agit en réalité d'une sortie de journalisation. 

Ce problème a été corrigé depuis Chrome 72.0. pas d'argument supplémentaire nécessaire.

1
Sajuuk