web-dev-qa-db-fra.com

Quelle est la différence entre browser.pause () et browser.enterRepl ()?

Dans le rapporteur, il y a la browser.pause() fonction :

Fonction bêta (instable) pause pour le débogage des tests du pilote Web. Utilisez browser.pause () dans votre test pour entrer le débogueur du rapporteur à partir de ce point dans le flux de contrôle.

element(by.id('foo')).click();
browser.pause();
// Execution will stop before the next click action.
element(by.id('bar')).click();

Et, aussi, il y en a un moins connu - browser.enterRepl() :

Fonction bêta (instable) enterRepl pour entrer dans la boucle de repl à partir de n'importe quel point du flux de contrôle. Utilisez browser.enterRepl () dans votre test. Ne nécessite pas de modifications de la ligne de commande (pas besoin d'ajouter 'debug').

element(by.id('foo')).click();
browser.enterRepl();
// Execution will stop before the next click action.
element(by.id('bar')).click();

D'après la documentation et les exemples fournis, il est clair qu'ils sont tous deux utilisés pour déboguer les tests. Mais, ce n'est pas clair, quelle est la différence entre les deux.

Quand faut-il utiliser pause() et quand enterRepl()?

23
alecxe

C'est expliqué dans le docs en général, mais je vais essayer d'aller un peu plus loin.

Le rapporteur a deux modes pour le débogage: DebuggerRepl et CommandRepl.

Repl signifie ici Read-eval-print-loop ce qui signifie généralement que quelle que soit la commande que vous tapez, elle est évaluée immédiatement dans le contexte actuel et vous reçoivent immédiatement un résultat. Par exemple, la console dans Chrome Developer Tools est un peu [~ # ~] repl [~ # ~] for Chrome's implémentation de JavaScript/DOM, ou lorsque vous exécutez node dans le terminal, vous obtenez un [~ # ~] repl [~ # ~] pour JavaScript de Node.js contexte - vous pouvez taper des commandes et obtenir le résultat.


Lorsque vous utilisez browser.pause() vous activez DebuggerRepl. Il vous apporte un Repl où vous pouvez exécuter des commandes de ce mode. Vous voyez généralement cette liste de commandes dans le terminal:

press c to continue to the next webdriver command
press d to continue to the next debugger statement
type "repl" to enter interactive mode
type "exit" to break out of interactive mode
press ^C to exit

Vous pouvez donc passer à la commande WebDriver suivante à l'aide de la commande c ou passer à l'instruction browser.pause() suivante dans votre test à l'aide de la commande d. Ils sont exécutés immédiatement lorsque vous les utilisez. Donc, ce mode vous permet essentiellement de sauter les états de page et d'explorer le résultat. (Remarque: ce mode fournit plus de commandes ; elles fonctionnent, mais je ne sais pas quelle est la signification de leur sortie et si elles sont utiles pour un utilisateur Protractor.)


Lorsque vous utilisez browser.enterRepl() vous activez Mode CommandRepl. Il vous permet d'utiliser les méthodes Protractor que vous utiliseriez dans les tests, mais en mode interactif. Vous avez accès aux objets element, browser et protractor, vous pouvez donc exécuter par exemple:

> $('.hello').getText();
> 'World'

Il vous affiche immédiatement le résultat, c'est donc une sorte de bac à sable où vous pouvez interroger le DOM sur l'état de la page actuelle et voir les résultats.

Comme vous l'avez peut-être remarqué, la liste des commandes browser.pause() a une ligne:

type "repl" to enter interactive mode

Cela signifie que lorsque vous êtes en mode DebuggerRepl, vous pouvez exécuter la commande repl pour activer Mode CommandRepl pour le l'état actuel de la page où vous venez d'exécuter browser.pause(), vous pouvez donc jouer avec DOM comme si vous veniez d'utiliser browser.enterRepl() . Vous pouvez revenir à Mode DebuggerRepl en utilisant la commande exit. Mais si vous êtes entré en mode CommandRepl en utilisant browser.enterRepl(), vous ne pouvez pas passer en mode DebuggerRepl.

En outre, Mode CommandRepl peut être activé avec une fonctionnalité appelée elementExplorer. Il peut être utilisé sans aucun test écrit; il ouvre juste une URL en mode CommandRepl.


tl; dr

Pour résumer, je crois qu'ils étaient censés être utilisés selon la façon dont ils sont appelés.

browser.pause() - Je veux qu'un navigateur s'arrête exactement à cet endroit pour que je puisse voir ce qui se passe sur la page. Ensuite, sur ma commande, je veux qu'il passe à l'état suivant afin que je puisse voir ce qui se passe ici. Si j'ai besoin de plus d'informations sur l'état actuel, je peux exécuter repl et utiliser l'API Protractor (browser, element, protractor) pour enquêter. Je peux alors exit ce mode et continuer à parcourir les états.

browser.enterRepl() - Je veux qu'un navigateur marque une pause exactement à cet endroit et me laisse enquêter sur une page en utilisant API Protractor (browser, element, protractor) tout de suite, et je n'ai pas besoin de pouvoir basculer entre les états de la page.

34
Michael Radionov

Protractor version 5.3 avec Node version 8.10 ne prend plus en charge browser.pause(). Plus d'infos - ici .

Il y a une chance que vous puissiez faire ce dont vous avez besoin avec async du rapporteur aswait .

1
Paulo Merson