2017-08-24 1 views
0

Ich möchte eine Funktion, um den Wert zurück, derWie kann ich einen Wert aus dem Konsolenprotokoll abrufen und in meinem Progractor-Test bestätigen?

Bitte beachten Sie die folgende Funktion für assertaion verwendet wird:

function giveWrittenValue(x) { 
     var msg; 
     x.getAttribute('value').then(function (value) { 
      if (value) { 
       console.log(value); 
       var errorMsg = $('.invalid.error-msg'); 
       errorMsg.isPresent().then(function (Present) { 
        if (Present) { 
         msg = errorMsg.getText(); 
        } 
        else { 
         msg = 'Valid'; 
        } 
       }); 
      } 
      else { 
       msg = 'No input is provided'; 
      } 
      return msg; 
     }); 
    } 

und mein Code ist hier:

it('Provider VAT number validation with invalid VAT number',function() { 
     ProviderVatNumber.sendKeys('IMEZ'); 
     element(by.tagName("body")).click(); 
     body.click(); 
     browser.sleep(3000); 
     ccc = giveWrittenValue(ProviderVatNumber); 
     expect(ccc).toBe('Invalid VAT number'); 
}); 

Ich denke, es einige ist Problem in der Funktion. Bitte helfen Sie mir in dieser Hinsicht.

+0

können Sie bitte erklären, was Sie genau wollen .. wo Sie console.log Wert verwenden möchten? – Nikita

+0

Ich möchte ein bestimmtes Konsolenprotokoll abrufen, das aus meinem Code generiert wird. Basierend auf dem erzeugten Konsolenprotokoll möchte ich überprüfen, ob mein Test bestanden oder fehlgeschlagen ist @ Nikita –

+0

Ich würde vorschlagen, einen besseren Weg zu finden, um die Funktionalität zu testen, an der Sie arbeiten ... das ist kein realistisches Szenario für eine Produktionsanwendung. Wenn überhaupt, anstatt diesen Wert in die Konsole zu schreiben, injiziere ihn einfach in ein HTML-Element und überprüfe dann, ob er dort existiert. – Gunderson

Antwort

0

Sie könnten der folgenden greifen die Konsolenprotokolle verwenden und dann zu einer Assertion auf sie ausführen:

browser.manage().logs().get('browser').then(function(browserLog) { 
    // Replace the following with an Assert statement 
    console.log('log: ' + require('util').inspect(browserLog)); 
    // expect(browserLog.length).toEqual(0); 
}); 

https://github.com/angular/protractor/blob/master/docs/faq.md#how-can-i-get-hold-of-the-browsers-console

Check there were no errors in the browser console with Protractor

+0

Ich habe meinen Beitrag mit Code aktualisiert. Kannst du mir dabei helfen? @ John Stennett –

0

Der Weg ist das folgende:

browser.manage().logs().get('browser').then(function(consoleLogs) { 
    // consoleLogs is an array of objects with level and message fields 
    // for example in the level property you can also check if it's an error through level.value > 900 
}); 

Aber die Frage ist: warum woul machst du das? Es ist wirklich eine ungewöhnliche Übung, etwas zu testen, das in der Konsole angezeigt wird (besonders in e2e-Tests). e2e Tests sollten dieses Zeug nicht testen.

p.s. Beachten Sie auch, dass Chrom bietet die assert Methode, die zum Testen direkt Ihre Protokolle verwendet werden könnten:

console.assert(1 > 2, {"message":"1 it's not greater than 2"}); 
+0

Hallo, ich habe gerade meinen Beitrag mit dem Code aktualisiert. Kannst du dazu beitragen? @quirummo –

+0

Zuerst müssen Sie den Wert innerhalb Ihrer Funktion giveWrittenValue zurückgeben. Dann wenn du anrufst musst du das dann benutzen. Alle Winkelmessermethoden geben Versprechen zurück, weil sie asynchron sind. Nur fyi, ich habe den Punkt, dass Sie Ihren Code geändert und Sie alle Fragen aktualisiert. Aber der richtige Weg, dies auf SO zu tun, ist, den alten Fragetext zu belassen und am Ende einen editierten mit dem neuen Code hinzuzufügen. Wenn Sie Ihre Frage vollständig ändern, erscheinen alle Antworten, die Sie bei der ersten Frage erhalten haben, verrückt, wenn sich ein Benutzer in der Zukunft die Frage ansieht – quirimmo

Verwandte Themen