Using testCafe 'requestLogger' to retrieve chrome performance logs fails

This is in continuation of this thread: Is there a way in TestCafe to validate Chrome network calls?

Here is my testCafe attempt to retrieve all the network logs(i.e. network tab in developer tools) from chrome. I am having issues getting anything printed on console.

const logger = RequestLogger('https://studenthome.com',{        
    logRequestHeaders: true,   
    logRequestBody: true,
    logResponseHeaders: true,
    logResponseBody:    true
});
    test  
    ('My  test - Demo', async t => {
        await t.navigateTo('https://appURL.com/app/home/students');//navigate to app launch
        await page_students.click_studentNameLink();//click on student name
        await t
            .expect(await page_students.exists_ListPageHeader()).ok('do something async', { allowUnawaitedPromise: true })       //validate list header
       await t
       .addRequestHooks(logger)     //start tracking requests
       let url = await page_studentList.click_tab();//click on the tab for which requests need to be validated

       let c = await logger.count; //check count of request. Should be 66

       await console.log(c);
        await console.log(logger.requests[2]);    // get the url for 2nd request
    }); 

I see this in console:

    [Function: count]
    undefined

Here is picture from google as an illustration of what I am trying to achieve. I navigate to google.com and opened up developer tools> network tab. Then I clicked on store link and captured logs. The request URLs I am trying to collect are highlighted. I can get all the urls and then filter to the one I require.

enter image description here

The following, I have already tried

await console.log(logger.requests); // undefined
await console.log(logger.requests[*]); // undefined
await console.log(logger.requests[0].response.headers); //undefined
await logger.count();//count not a function

I would appreciate if someone could point me in the right direction?

1 thought on “Using testCafe 'requestLogger' to retrieve chrome performance logs fails”

  1. You are using different urls in your test page (‘https://appURL.com/app/home/students’) and your logger (‘https://studenthome.com’). This is probably the cause.
    Your Request Logger records only requests to ‘https://studenthome.com’.

    In your screenshot I see the url ‘http://store.google.com’, which differs from the logger url, so the logger does not process it.

    You can pass a RegExp as a first arg of the RequestLogger constructor to all requests which match your RegExp.

    I have created a sample:

    import { RequestLogger } from 'testcafe';
    
    const logger = RequestLogger(/google/, {
        logRequestHeaders:  true,
        logRequestBody:     true,
        logResponseHeaders: true,
        logResponseBody:    true
    });
    
    fixture `test`
        .page('http://google.com');
    
        test('test', async t => {
            await t.addRequestHooks(logger);
    
            await t.typeText('input[name="q"]', 'test');
            await t.typeText('input[name="q"]', '1');
            await t.typeText('input[name="q"]', '2');
            await t.pressKey('enter');
    
            const logRecord = logger.requests.length;
    
            console.log(logger.requests.map(r => r.request.url));
        });
    
    Reply

Leave a Comment