Quelle est la différence entre ces
Webdriver.Close()
Webdriver.Quit()
Webdriver.Dispose()
Lequel doit être utilisé et quand ?
Quelle est la différence entre ces
Webdriver.Close()
Webdriver.Quit()
Webdriver.Dispose()
Lequel doit être utilisé et quand ?
C'est une bonne question. J'ai vu des gens utiliser Close() alors qu'ils ne devraient pas. J'ai regardé dans le code source des liaisons Selenium Client & WebDriver C# et j'ai trouvé ce qui suit.
webDriver.Close()
- Fermez la fenêtre du navigateur sur laquelle le pilote a le focus.webDriver.Quit()
- Appelle Dispose()webDriver.Dispose()
Ferme toutes les fenêtres du navigateur et met fin à la session en toute sécurité.Le code ci-dessous disposera de l'objet driver, mettra fin à la session et fermera tous les navigateurs ouverts pendant un test, que le test échoue ou réussisse.
public IWebDriver Driver;
[SetUp]
public void SetupTest()
{
Driver = WebDriverFactory.GetDriver();
}
[TearDown]
public void TearDown()
{
if (Driver != null)
Driver.Quit();
}
En résumé, assurez-vous que Quit() ou Dispose() est appelé avant de quitter le programme, et n'utilisez la méthode Close() que si vous êtes sûr de ce que vous faites.
Note
J'ai trouvé cette question en essayant de comprendre un problème connexe, à savoir pourquoi mes machines virtuelles manquaient d'espace sur le disque dur. Il s'avère qu'une exception faisait que Quit() ou Dispose() n'étaient pas appelés à chaque exécution, ce qui faisait que le dossier appData remplissait le disque dur. Donc nous utilisions la méthode Quit() correctement mais le code était inaccessible. En résumé, assurez-vous que tous les chemins de code nettoient vos objets non gérés en utilisant des modèles sûrs pour les exceptions ou en implémentant IDisposable.
Aussi
Dans le cas de RemoteDriver, l'appel de Quit() ou Dispose() fermera également la session sur le serveur Selenium. Si la session n'est pas fermée, les fichiers journaux de cette session restent en mémoire.
Comment avez-vous mis à jour vos exceptions ? En allant simplement à chacune d'elles et en ajoutant un quit() ?
Dans un cadre de test comme NUnit ou JUnit, il suffit de s'assurer que la fonction Dispose() se trouve dans la fonction TestTeardown() ou TestFixtureTeardown(). En C#, il suffit d'utiliser une instruction "using" et Dispose est toujours appelé si une exception est levée. Vous pouvez faire quelque chose de similaire en Java en utilisant un try catch finally et en plaçant Dispose dans le finally.
@rcasady616 concernant IDisposable et un test NUnit ou similaire, avez-vous un exemple que vous pouvez fournir ? Nous avons un Destructeur au niveau du test qui appelle Dispose() sur webdriver, mais nous ne sommes pas sûrs que cela soit suffisant ou si nous devons implémenter IDisposable sur une classe de test NUnit. Avez-vous étudié la façon dont une classe de test peut implémenter IDisposable et comment cela peut être appelé à partir du framework de test au moment de l'exécution ? J'aimerais bien le savoir !
driver.close
y driver.quit
Il existe deux méthodes différentes pour fermer la session du navigateur dans Selenium WebDriver. Comprendre ces deux méthodes et savoir quand les utiliser est important pour l'exécution de vos tests. J'ai donc essayé de faire la lumière sur ces deux méthodes.
driver.close
- Cette méthode permet de fermer la fenêtre du navigateur sur laquelle se trouve le focus. Malgré le nom familier de cette méthode, WebDriver
fait no mettre en œuvre la AutoCloseable
interface .
driver.quit
- Cette méthode appelle essentiellement driver.dispose
une méthode désormais interne qui, à son tour, ferme toutes les fenêtres du navigateur et met fin à la session WebDriver de manière élégante.
driver.dispose
- Comme mentionné précédemment, il s'agit d'une méthode interne de WebDriver qui a été abandonnée en silence selon une autre réponse - Vérification nécessaire. Cette méthode n'a pas vraiment de cas d'utilisation dans un flux de test normal car l'une ou l'autre des méthodes précédentes devrait fonctionner pour la plupart des cas d'utilisation.
Explication du cas d'utilisation : Vous devriez utiliser driver.quit
chaque fois que vous voulez terminer le programme. Il fermera toutes les fenêtres de navigateur ouvertes et mettra fin à la session WebDriver. Si vous n'utilisez pas driver.quit
à la fin du programme, la session WebDriver ne se fermera pas correctement et les fichiers ne seront pas effacés de la mémoire. Cela peut entraîner des erreurs de fuite de mémoire.
L'explication ci-dessus devrait expliquer la différence entre driver.close
y driver.quit
dans WebDriver. J'espère que vous le trouverez utile.
Le site web suivant donne de bons conseils sur l'analyse du sélénium : Lien
fermer() est une commande webdriver qui ferme la fenêtre du navigateur qui est actuellement en focus. Malgré le nom familier de cette méthode, WebDriver
fait no mettre en œuvre la AutoCloseable
interface .
Pendant le processus d'automatisation, si plus d'une fenêtre de navigateur est ouverte, la commande close() ne fermera que la fenêtre de navigateur actuelle qui a le focus à ce moment-là. Les autres fenêtres du navigateur ne seront pas fermées. Le code suivant peut être utilisé pour fermer la fenêtre du navigateur en cours :
quitter() est une commande webdriver qui appelle la méthode driver.dispose, laquelle ferme à son tour toutes les fenêtres du navigateur et met fin à la session WebDriver. Si nous n'utilisons pas quit() à la fin du programme, la session WebDriver ne sera pas fermée correctement et les fichiers ne seront pas effacés de la mémoire. Cela peut entraîner des erreurs de fuite de mémoire.
Si le processus d'automatisation n'ouvre qu'une seule fenêtre de navigateur, les commandes close() et quit() fonctionnent de la même manière. Elles diffèrent dans leur fonctionnement lorsqu'il y a plus d'une fenêtre de navigateur ouverte pendant l'automatisation.
Pour ci-dessus Ref : cliquez ici
Commande d'élimination Dispose() devrait appeler Quit(), et il semble que ce soit le cas. Cependant, le problème est le même : toutes les actions ultérieures sont bloquées jusqu'à ce que PhantomJS soit fermé manuellement.
Réf. Lien
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
La méthode #dispose semble avoir été silencieusement supprimée de l'API WebDriver. Aucune mention dans le changelog, la mention la plus récente que j'ai pu trouver était la docs api v2.26, dont je ne trouve plus le lien.
0 votes
Je vois d'où vient la confusion dans les réponses ci-dessous. Je pense que cette question était à l'origine une question C# car les méthodes ci-dessus (Close, Quit et Dispose) commencent par une majuscule (C#) et non par une minuscule (java). Dispose n'a pas été supprimé des liaisons client WebDriver C#.
0 votes
Dispose est un modèle .Net et n'est donc pas documenté dans la documentation de l'API de Selenium. Dans RemoteWebDriver, Quit appelle Dispose, qui envoie une commande Quit (DELETE /session/{sessionId}). Il y a plusieurs endroits du côté client où la commande Quit est interceptée. L'implémentation .net de FirefoxDriver, par exemple, effectue un appel à process.Kill() si le processus ne s'arrête pas de manière élégante.