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

Dans protractor, il y a le browser.pause() Fonction :

Beta (unstable) pause fonction de débogage des tests webdriver. Utiliser navigateur.pause() dans votre test pour entrer le rapporteur débogueur 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 est moins connu - browser.enterRepl():

Beta (unstable) enterRepl Fonction pour entrer dans la boucle repl de n'importe quel point dans le flux de contrôle. Utilisez le navigateur.enterRepl () dans votre test. Faire nécessite pas de modifier 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, on ne sait pas, quelle est la différence entre les deux.

Quand devrions-nous utiliser pause() et quand enterRepl()?

22
demandé sur alecxe 2015-07-14 20:20:49

2 réponses

C'est expliqué dans les docs {[30] } en général, mais je vais essayer d'aller un peu plus loin.

Rapporteur a deux modes de pour le débogage: DebuggerRepl et CommandRepl.

Repl {[36] } ici signifie Read-eval-print-loop {[36] } 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 recevez un résultat immédiatement. Par exemple, la console dans Chrome Developer Outils de est un peu un REPL pour Chrome mise en œuvre de JavaScript/DOM, ou lorsque vous exécutez node dans le terminal, vous obtenez un REPL pour Nœud.contexte JavaScript DE js - 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 prochaine commande WebDriver en utilisant la commande c ou passer à la prochaine instruction browser.pause() dans votre test en utilisant la commande d. Ils sont exécutés tout de suite que vous les utilisez. Donc, ce mode vous permet essentiellement de sauter par-dessus les états de page et d'explorer le résultat. (Note: ce mode fournit plus de commandes; ils fonctionnent, mais je ne suis pas sûr de la signification de leur sortie et si elles sont utiles pour un utilisateur Rapporteur à tout.)


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

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

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

Comme vous pouvez l'avoir 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 le mode CommandRepl pour l'état 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 au mode DebuggerRepl en utilisant la commande exit. Mais si vous êtes entré dans CommandRepl mode en utilisant browser.enterRepl(), Vous ne pouvez pas passer à Mode DebuggerRepl .

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


Tl; dr

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

browser.pause() - je veux qu'un navigateur fasse une pause exactement à cet endroit afin que je puisse voir ce qui se passe sur la page. Ensuite, sur mon commande, je veux qu'il passe à l'état suivant pour que je puisse voir ce qui se passe ici. Si j'ai besoin de plus d'informations pour 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 à sauter à travers les États.

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

32
répondu Michael Radionov 2015-07-20 22:51:59

Rapporteur version 5.3 avec noeud Version 8.10 ne supporte pas browser.pause() Plus maintenant. Plus d'infos ici .

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

1
répondu Paulo Merson 2018-03-19 21:25:39