web-dev-qa-db-fra.com

Comment gérer la superposition suspendue dans le débogueur lors de l'exécution automatisée des tests à l'aide de Selenium

Chaque fois que j'essaie d'accéder à ce site Web et d'ouvrir google-chrome-devtools Je ne peux inspecter aucun des éléments via l'inspecteur car l'interface utilisateur a une superposition avec un message Paused in debugger.

Le réponse votée et acceptée de cette discussion dit de vérifier l'onglet Source, vérifiez sous le panneau Points d'arrêt du récepteur d'événements si vous avez défini des points d'arrêt sous 'Souris'. J'ai vérifié que aucun des Sources -> EventListenerBreakpoint n'est défini.

Le réponse votée et acceptée de cette discussion dit de vérifier si le petit signe octogonal stop/pause (en bas à gauche de Chrome "Sources") est coloré (bleu ou violet) Je ne sais pas pourquoi dois-je le faire en plus pour certains sites Web.

Instantané:

DebuggerPaused

Le réponse votée et acceptée de cette discussion parle des étapes manuelles.

Toutes les solutions semblent pointer vers le processus manuel. Mais ce problème me semble être à l'origine de Selenium incapable de getPageSource().

Essais de code:

System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");
options.addArguments("disable-infobars");
options.addArguments("--disable-extensions");
WebDriver driver = new ChromeDriver(options);
driver.get("http://rd.huangpuqu.sh.cn/website/html/shprd/shprd_tpxw/List/list_0.htm");

Sortie: Chrome s'ouvre mais ne navigue pas vers l'url.

Mes questions sont donc:

  • Dans quel cas l'erreur Paused in debugger Peut-elle se produire?
  • Est-ce une erreur du développement frontal?
  • Comment puis-je contourner cette erreur pendant les Tests automatisés à Sélénium?
16
DebanjanB
  • Dans quels cas le Paused in debugger une erreur s'est-elle produite?

    Chaque fois que vous accédez à cette page avec les outils de développement ouverts. Le debugger; la ligne suspendra l'exécution de javascript, mais les navigateurs l'ignoreront si les outils de développement sont fermés.

  • Est-ce une erreur du développement frontend?

    Dans ce cas, non - ils essaient délibérément de vous empêcher d'entrer. Le but de cette fonction est de suspendre l'exécution, puis de rediriger votre navigateur vers une autre page s'il faut plus de 100 ms pour reprendre. Je suppose que cela est conçu pour interférer avec les robots automatisés comme Selenium, car un utilisateur régulier ne serait pas affecté et un développeur humain peut simplement le pirater.

  • Comment puis-je contourner cette erreur pendant les tests automatisés via Selenium?

Ma première recommandation serait d'essayer d'exécuter Selenium sans tête, si c'est une option. Sinon, tilisez le raccourci clavier pour reprendre l'exécution (F8). Vous pouvez utiliser la méthode que vous souhaitez pour générer une pression de touche; avec le package Java.awt, cela ressemblera à ceci:

Robot robot = null;
try
{
   robot = new Robot();
}
catch(Exception e)
{
   //handle failure
}
robot.keyPress(KeyEvent.VK_F8);

N'oubliez pas que vous devez déclencher cela dans un délai de 100 ms, utilisez donc la logique que vous souhaitez pour détecter le blocage et répondre rapidement. Si vous voulez juste quelque chose de rapide et de sale, je ferais simplement en sorte que le spam F8 appuie sur les touches toutes les 50 ms pendant un certain temps jusqu'à ce que vous soyez certain que la page a été chargée.

EDIT: Après enquête, cette page est extrêmement désordonnée et hostile à quiconque avec les outils de développement ouverts. Il n'y a pas une mais plusieurs fonctions qui déclenchent debugger;et ils sont appelés à plusieurs reprises sur une minuterie tant que vous êtes sur la page. L'exécution sans tête semble être le meilleur choix, sauf si vous souhaitez continuer à envoyer du spam F8 pendant toute la session.

7
Miltios