Home > Enterprise >  How to pause the test script for 3 seconds before continue running it? Playwright
How to pause the test script for 3 seconds before continue running it? Playwright

Time:11-03

I'm running a test called create admin. The test will first create admin, then check if the admin was created successfully.

In the script, I have a part of code where I want to wait for 3 seconds before continuing because whenever the submit button was clicked, the website will need to take 3s to refresh the admin table (list of user info) after navigation was done. For more information, this refresh is not a navigation and therefore, my 'waitForNavigation()' is not working.

Therefore, the process will be like: 'fill out the form' > 'click submit button' > 'wait for navigation' > 'reload user table (3s).

If I don't wait 3s for the table to refresh, the test will throw an error because the registered user will not be found in the table (I have other scripts to find the user).

This is how the navigation looks like when 'Save button' was clicked: enter image description here

After that, the table takes 3s to refresh and it looks like: enter image description here

This is how the 'create' function looks like: enter image description here

CodePudding user response:

Use setTimeout to do that. Here's an example

function  delayedCheck() {
  const processComplete = true; // set the right boolean here

  if ( processComplete ) {
    // Do something
  } else {
    setTimeout(delayedCheck, 3000); // try again in 3 seconds
  }
}

delayedCheck();

CodePudding user response:

I have created a function called 'delayChecked()' to delay the scripts for 3s. But it doesn't work as I expected.

async function delayedCheck() {
    // Refresh the table data required 3 seconds.
    // Therefore, delay the scripts for 3 seconds.
    let process_complete = false;

    if (!process_complete) {
        setTimeout(() => {
            process_complete = true;
        }, 3000);
    }
}

export async function create(page: Page) {
    await openUserTabOn(page);

    const username = NAME_BASE   suffixify();

    await page.click('text=New');
    await page.fill('[placeholder="Name here..."]', 'testing123');
    await page.fill('[placeholder="Username here..."]', username);
    await page.fill('[placeholder="Password here..."]', 'xe123456');
    await page.click('[role="listbox"]:has-text("admin")');
    await page.click('[role="option"]:has-text("admin")');
    await page.click('button :text-is("Save")');
    await delayedCheck();
    return username;
};

What could be the problem here??

CodePudding user response:

You can wrap setTimeout as Promise and use it inside async functions:

const delay = ms => new Promise(resolve => setTimeout(resolve, ms))

where ms - delay in millisceonds you wanna wait.

Usage in your code:

...
await page.click('button :text-is("Save")');
await delay(3000); // <-- here we wait 3s
return username;
  • Related