Protractor console log

前端 未结 6 1453
[愿得一人]
[愿得一人] 2020-12-04 16:48

I want to output the text of a div in my protractor test, so far I have:

console.log(ptor.findElement(protractor.By.id(\'view-container\')).getText());


        
相关标签:
6条回答
  • 2020-12-04 16:54

    this is pretty old, but as a former n00b at protractor, I wished there was more documentation.

    you could also use:

    element(by.id('view-container')).getText().then(console.log);
    

    or what I like to do for readability is put all the objects on a page in their own function, section, or file:

    //top declaration of variables
    var viewContainer = element(by.id('view-container')).getText();
    
    .... //bunch of code
    ....
    
    viewContainer.then(console.log);
    

    That will take care of most of your garden-variety debugging needs.

    For promises in general, you could try using protractor.promise.all()

    let's say you have two things that are both promises:

    var getTime      = element(by.xpath(theTimeXpath)).getText();
    var getPageTitle = element(by.xpath(thePageTitle)).getInnerHtml();
    
    protractor.promise.all([getTime, getPageTitle]).then(function(theResultArray){
    
      var timeText           = result[0];
      var pageTitleInnerHtml = result[1];
    
       console.log(timeText);           // outputs the actual text
       console.log(pageTitleInnerHtml); //outputs the text of the Inner html
    });
    

    This second method is useful for when things begin to get more complex. personally, however, I find other ways around this. Although it's not bad, it's kind of funky for other developers having to read my code.

    0 讨论(0)
  • 2020-12-04 17:05

    getText and most other Protractor methods return promises. You want to put your console.log statement inside the promise resolution:

    Using the new Protractor syntax:

    element(by.id('view-container')).getText().then(function(text) {
      console.log(text);
    });
    
    0 讨论(0)
  • You could always assert that the text you get is the text you expect:

    expect(element(by.id('view-container')).getText()).toBe('desired-text');

    0 讨论(0)
  • 2020-12-04 17:12

    When user wants to log the expected and actual result in protractor always use then method implementation.

    verifyDisplayedText(locator: Locator, expectedText: string) {
    const text = this.getText(locator);
    try {
    text.then(function(value){
    if (value.trim() === expectedText) {
    verifyLog("VERIFICATION: PASSED. Expected: '" + expectedText + "' Actual: '" + value+"'");
    } else {
    errorLog("VERIFICATION: FAILED. Expected: '" + expectedText + "' Actual: '" + value+"'");
    }
    });
    expect(text).toBe(expectedText);
    }catch (error1) {
    errorLog("VERIFICATION: FAILED. Expected: '" + expectedText + "' Actual: '" + text+"'");
    throw error1;
    }
    }
    
    0 讨论(0)
  • 2020-12-04 17:13

    I would like to suggest a small improvement to other answers.

    short answer : I like to use browser.sleep(0).then(..); where I need to push something to protractor's flow.

    it is generic and easy to move around.

    tl;dr

    so using the above, you can easily add a function on browser (or ptor) something like:

    browser.log = function( logger, level, msg ){
         browser.sleep(0).then(function(){ logger[level](msg); });
    }
    

    or something a bit more sophisticated with apply - but that depends on your logger.

    you can obviously enhance that a bit to have logger like api

    var logger = browser.getLogger('name');
    

    should be implemented like (lets assume log4js)

    browser.getLogger = function( name ){
            var logger = require('log4js').getLogger(name);
    
            function logMe( level ) {
                     return function(msg ){
                          browser.sleep(0).then(function(){ logger[level](msg); });
                     }
    
            }
    
            return { info : logMe('info'), ... }
    }
    

    basically, the sky is the limit.

    I am sure there's a way to make my code a lot shorter, the point is using the sleep method as basis.

    0 讨论(0)
  • 2020-12-04 17:15

    you can try this one:

    const textInfo = element(by.id('view-container'));
    console.log('text: ', textInfo.getText());
    
    0 讨论(0)
提交回复
热议问题