@@ -4,6 +4,7 @@ const fs = require('fs');
44const Helper = require ( '@codeceptjs/helper' ) ;
55const { v4 : uuidv4 } = require ( 'uuid' ) ;
66const assert = require ( 'assert' ) ;
7+ const promiseRetry = require ( 'promise-retry' ) ;
78const Locator = require ( '../locator' ) ;
89const store = require ( '../store' ) ;
910const recorder = require ( '../recorder' ) ;
@@ -50,6 +51,7 @@ const { createValueEngine, createDisabledEngine } = require('./extras/Playwright
5051const {
5152 seeElementError, dontSeeElementError, dontSeeElementInDOMError, seeElementInDOMError,
5253} = require ( './errors/ElementAssertion' ) ;
54+ const { log } = require ( '../output' ) ;
5355
5456const pathSeparator = path . sep ;
5557
@@ -2890,6 +2892,38 @@ class Playwright extends Helper {
28902892 }
28912893 }
28922894
2895+ /**
2896+ * {{> waitForCookie }}
2897+ */
2898+ async waitForCookie ( name , sec ) {
2899+ // by default, we will retry 3 times
2900+ let retries = 3 ;
2901+ const waitTimeout = sec ? sec * 1000 : this . options . waitForTimeout ;
2902+
2903+ if ( sec ) {
2904+ retries = sec ;
2905+ } else {
2906+ retries = Math . ceil ( waitTimeout / 1000 ) - 1 ;
2907+ }
2908+
2909+ return promiseRetry ( async ( retry , number ) => {
2910+ const _grabCookie = async ( name ) => {
2911+ const cookies = await this . browserContext . cookies ( ) ;
2912+ const cookie = cookies . filter ( c => c . name === name ) ;
2913+ if ( cookie . length === 0 ) throw Error ( `Cookie ${ name } is not found after ${ retries } s` ) ;
2914+ } ;
2915+
2916+ this . debugSection ( 'Wait for cookie: ' , name ) ;
2917+ if ( number > 1 ) this . debugSection ( 'Retrying... Attempt #' , number ) ;
2918+
2919+ try {
2920+ await _grabCookie ( name ) ;
2921+ } catch ( e ) {
2922+ retry ( e ) ;
2923+ }
2924+ } , { retries, maxTimeout : 1000 } ) ;
2925+ }
2926+
28932927 async _waitForAction ( ) {
28942928 return this . wait ( this . options . waitForAction / 1000 ) ;
28952929 }
0 commit comments