1
votes

Fuites de mémoire lorsque vous travaillez avec IEDriverServer et Selenium sur C # avec IE11

J'utilise C # -Selenium sur IE11 sous Windows 7/10. Pendant tout ce temps lors de l'exécution du script, la mémoire IE11 continue d'augmenter jusqu'à atteindre 1,5 Go de mémoire. Remarque Je ne peux rien fermer ni quitter car j'ai besoin de mon test pour continuer à s'exécuter. Le problème est que IE11 ne cesse de s'agrandir au fur et à mesure que le test progresse

En comparaison, lors de l'exécution du même script avec QTP, rien de tout cela ne se produit. Version WebDriver 32 bits: 3.8 et 3.141

L'application Web elle-même est une propriété exclusive Avez-vous une idée par où dois-je commencer à chercher pour résoudre le problème?

Merci

J'ai essayé de réduire mon code, de détecter les fuites de mémoire


2 commentaires

exécutez 'taskkill / f / im iexplore.exe' qui devrait nettoyer les fenêtres qui ne répondent pas. voir la réponse d'origine


Je n'ai aucun problème à fermer ou à tuer IE. Le problème se produit lorsque et pendant l'exécution du script


3 Réponses :


0
votes

Le problème peut être que vos scripts de test ne ferment pas réellement le (s) navigateur (s).

J'ai rencontré un bogue dans sélénium IE qui ne ferme pas le navigateur avec les commants .close ou .quite. Cela signifie que cela ouvrira beaucoup de fenêtres et que cela pourrait provoquer des fuites de mémoire.


4 commentaires

Cela se produit pendant l'exécution du script.


J'ai oublié de mentionner: j'utilise la version 32 bits du WebDriver


Avez-vous vu les tests fonctionner dans IE? (aucun problème avec les fenêtres contextuelles de sécurité dans la fenêtre IE?) Ce problème se produit-il également avec un sous-ensemble des tests?


Fermez-vous les fenêtres IE après chaque test? Ou les gardez-vous ouverts? Parce qu'alors le problème peut également se produire pendant l'exécution du script ... Une machine virtuelle manquait de mémoire en raison de nombreuses fenêtres non fermées.



0
votes

Un exemple d'extrait de code du processus d'initialisation / de fermeture de WebDriver et du navigateur Web nous aurait donné des indications sur l'utilisation de IEDriverServer et IE11 la mémoire continue d'augmenter jusqu'à ce qu'elle atteigne 1,5 Go .

Peut-être que selon les meilleures pratiques, invoquez toujours driver.quit () dans la méthode tearDown () {} pour fermer et détruire le WebDriver et Web Client instances de la manière suivante:

import os
import psutil

PROCNAME = "IEDriverServer" # or chromedriver or geckodriver
for proc in psutil.process_iter():
    # check whether the process name matches
    if proc.name() == PROCNAME:
        proc.kill()

Vous pouvez trouver une discussion détaillée dans Le pilote Web PhantomJS reste en mémoire

Au cas où les processus IEDriverServer sont toujours non détruit et supprimé, vous devrez peut-être tuer les processus de la liste des tâches.

  • Solution Python ( multiplate-forme ):

    driver.quit() // Python
    // or
    driver.quit(); // Java
    // or
    driver.Quit(); // DotNet
    

Vous pouvez trouver une discussion détaillée dans Selenium: Comment arrêter le processus geckodriver qui affecte la mémoire du PC, sans appeler driver.quit ()?

De plus ,


5 commentaires

Le problème est que je ne peux pas fermer ou quitter quoi que ce soit car j'ai besoin de mon test pour continuer à fonctionner. Le problème est que IE11 ne cesse de s'agrandir au fur et à mesure que le test progresse


cela ne répond pas à la question


@Shmulikb Selenium est largement utilisé pour l ' automatisation des tests où chaque cas de test est basé sur des cas d'utilisation . OMI, ... j'ai besoin de mon test pour continuer à fonctionner ... n'est pas un cas d'utilisation valide. Peut-être aurez-vous besoin de l'aide d'un serveur d'applications , par exemple Tomcat .


@DebanjanB Comme mentionné, QTP fait bien le travail et Selenium fait exploser la mémoire d'IE11 en 5 à 10 minutes de fonctionnement.


@Shmulikb Je ne peux pas commenter QTP mais Selenium de par sa conception est un peu différent de QTP. De plus, IE est un autre grand défi qu'il faut maîtriser.



0
votes

Après de nombreuses recherches, j'ai quelque peu résolu le problème en désactivant le "Débogage de script (Internet Explorer)" dans IE11 sous Outils -> Options -> Avancé.

Sur mon code Selenium, il y a une écoute de ce ScriptExecuted événements (ce qui est un must dans mon code):

    firingDriver.ScriptExecuted += firingDriver_ScriptExecuted;

Peut-il être lié?

Donc pour l'instant, je n'ai aucune idée pourquoi désactiver le débogage de script réduit considérablement les fuites de mémoire. Lors de l'exécution du même scénario QTP, il n'y a pas de fuite de mémoire.

et si quelqu'un a une idée, j'aimerais l'entendre

Merci!


0 commentaires