web-dev-qa-db-fra.com

Comment arrêter la fermeture automatique du navigateur lors de la rédaction de scénarios de test de rapporteur

Je suis nouveau dans l'écriture de cas de tests en utilisant un rapporteur pour une application non angulaire. J'ai écrit un exemple de scénario de test. Le navigateur se ferme automatiquement après l'exécution du scénario de test. Comment puis-je empêcher cela? Voici mon code

var submitBtnElm = $('input[data-behavior=saveContribution]');

      it('Should Search', function() {
        browser.driver.get('http://localhost/enrollments/osda1.html');   
        browser.driver.findElement(by.id('contributePercentValue')).sendKeys(50);
        submitBtnElm.click().then(function() {

        });
      });
11
Balu

Ajoutez browser.pause() à la fin de votre fonction it. Dans la fonction elle-même.

5
doct03

Ajoutez une fonction de rappel dans le bloc It et la fenêtre du navigateur ne se fermera pas tant que vous ne l’appelez pas.

var submitBtnElm = $('input[data-behavior=saveContribution]');
  it('Should Search', function(callback) {
    browser.driver.get('http://localhost/enrollments/osda1.html');   
    browser.driver.findElement(by.id('contributePercentValue')).sendKeys(50);
    submitBtnElm.click().then(function() {
       // Have all the logic you need
       // Then invoke callback
       callback();
    });
  });
4
AdityaReddy

Je vous suggère d'utiliser browser.driver.sleep(500); avant votre opération de clic.

Regarde ça.

browser.driver.sleep(500);

element(by.css('your button')).click();
browser.driver.sleep(500);
4
Manuli Piyalka

J'étais également aux prises avec un problème similaire dans lequel j'avais un flux de cas de test dans lequel nous étions en interaction avec plusieurs applications et avec Protractor, le navigateur se fermait après l'exécution d'un fichier conf.js. Maintenant, quand j’ai regardé dans la réponse précédente, c’était comme ajouter un délai qui dépend de la rapidité avec laquelle votre prochaine action a été effectuée ou de l’absence ou non du cas. Même si nous pensons que, du point de vue du débogage, la plupart des utilisateurs effectuent des analyses nocturnes et souhaitent que le navigateur soit actif pendant quelques heures avant d'analyser le problème. J'ai donc commencé à examiner le code de base du rapporteur et suis tombé sur une solution générique qui peut contourner ce problème, indépendamment de tout navigateur. Actuellement, la solution spécifie que le navigateur ne doit pas se fermer après l’exécution d’un fichier conf.js, mais pourrait être amélioré si un utilisateur pouvait ajouter un paramètre de configuration demandant à l’utilisateur s’il souhaitait fermer le navigateur après son exécution.

Le navigateur pourrait être réutilisé pour une utilisation ultérieure du fichier conf.js en utilisant la balise --seleniumSessionId en ligne de commande.

Solution:

  • Accédez à la page ..\AppData\Roaming\npm\node_modules\protractor\où le rapporteur Est installé.
  • Ouvrez le fichier driverProvider.js et accédez à la fonction quitDriver 
  • Remplacer renvoyer driver.quit () par renvoyer 0

En ce qui concerne mon utilisation actuelle, il semble n'y avoir aucun effet secondaire du changement de code, sera mis à jour si je rencontre un autre problème en raison de ce changement. Instantané de l'extrait de code ci-dessous.

Merci Gleeson

Instantané de l'extrait de code: Snapshot of code snippet

3
Gleeson

La meilleure façon de faire browser NE PAS fermer pendant un certain temps, utilisez browser.wait () . Dans la logique de la fonction d'attente, écrivez une logique pour vérifier soit la visibilitéOf (), soit l'invisibilitéOf () d'un élément, ce qui n'est pas visible ou cela prendra du temps pour devenir invisible sur l'interface utilisateur. Dans ce cas, wait () continue de vérifier la logique jusqu'à ce que la condition soit remplie ou que le délai d'attente soit atteint. Vous pouvez augmenter le délai si vous souhaitez que le navigateur soit visible plus longtemps.

var EC=protractor.ExpectedConditions;
var submitBtnElm = $('input[data-behavior=saveContribution]');

it('Should Search', function() {
   browser.driver.get('http://localhost/enrollments/osda1.html');   
   browser.driver.findElement(by.id('contributePercentValue')).sendKeys(50);
   submitBtnElm.click().then(function() {
   browser.wait(function(){
            EC.invisibilityOf(submitBtnElm).call().then(function(isPresent){
                if(isPresent){
                    return true;
                }
            });
        },20000,'error message');
    });
  });
3
Suresh Salloju

Je suis sûr qu'un changement a été déclenché sur votre page par un clic de bouton. Cela peut être aussi subtil qu'un changement de classe sur un élément ou aussi évident qu'un élément <p></p> avec le texte "Sauvé" affiché. Ce que je ferais, c’est, après le test, d’attendre explicitement ce changement.

[...]
return protractor.browser.wait(function() {
    return element(by.cssContainingText('p', 'Saved')).isPresent();
}, 10000);

Vous pouvez ajouter un tel mécanisme d'attente à la méthode afterEach() de votre fichier de spécification, de sorte que vos tests soient séparés même sans l'attente implicite de Protractor Angular.

2
Vlad
var submitBtnElm = $('input[data-behavior=saveContribution]');

  it('Should Search', function() {
    browser.driver.get('http://localhost/enrollments/osda1.html');   
    browser.driver.findElement(by.id('contributePercentValue')).sendKeys(50);
    submitBtnElm.click().then(function() {

    });
    browser.pause(); // it should leave browser alive after test
  });

browser.pause () devrait laisser le navigateur actif jusqu'à ce que vous le laissiez aller.

Une autre approche consiste à définir browser.ignoreSynchronization = true avant browser.get (...). Le rapporteur n'attendrait pas que Angular soit chargé et que vous puissiez utiliser la syntaxe habituelle element (...).

2
Hikaryu

J'ai trouvé que la solution de Gleeson fonctionnait et cela m'a vraiment aidé. La solution était ...

  1. Accédez à% APPDATA% Roaming\npm\node_modules\protractor\built\driverProviders \
  2. Trouver driverProviders.js
  3. Ouvrez-le dans le bloc-notes ou tout autre éditeur de texte
  4. Find and Replace return driver.Quit () to return 0
  5. Sauvegarder le fichier

Redémarrez vos tests après cela.

J'utilise Noeud v8.12.0 Npm v6.4.1 Rapporteur v5.4.1

Cette solution ne fonctionnera que si vous avez installé npm ou un rapporteur globalement. si vous avez installé votre npm ou votre rapporteur localement (dans votre dossier), vous devez accéder à votre dossier de rapporteur local et faire de même.

0
Mahbubur Rahman