0

I'm writing Playwright tests integrated with the Browserstack Automate dashboard. I have encountered a situation where if run e.g. 5 tests in a file, they will all run locally in Playwright and all results will be displayed in terminal, but the Browserstack Dashboard will always only be updated with results of 2 tests (the default number of workers for each test run is 2).

However, if I manually open (const browser = await chromium.launch(); const page = await browser.newPage();) and close the browser in each test, the Browserstack dashboard correctly logs all test runs.

This works:


test('test1', async ({ }) => {
  test.setTimeout(240000)
  const browser = await chromium.launch();
  const page = await browser.newPage();
  try {
    //test code here
    await page.evaluate(_ => {}, `browserstack_executor: ${JSON.stringify({action: 'setSessionStatus',arguments: {name: '', status: 'passed',reason: ''}})}`);
  } catch (e) {
    console.log(e);
    await page.evaluate(_ => {}, `browserstack_executor: ${JSON.stringify({action: 'setSessionStatus',arguments: {name: '', status: 'failed',reason: ''}})}`);

  }  
  browser.close()

});

....

Given that opening and closing the browser for each individual test seems to make Browserstack log them correctly, I'm trying to write a beforeEach and afterEach hook to do this. However, this doesn't work:

test.beforeEach(async ({  }) => {
    const browser = await chromium.launch();
    const page = await browser.newPage();

    await page.goto(`${url}`);
  });

test('test1', async ({ page }) => {
  test.setTimeout(240000)
  try {
    //test code here
    await page.evaluate(_ => {}, `browserstack_executor: ${JSON.stringify({action: 'setSessionStatus',arguments: {name: '', status: 'passed',reason: ''}})}`);
  } catch (e) {
    console.log(e);
    await page.evaluate(_ => {}, `browserstack_executor: ${JSON.stringify({action: 'setSessionStatus',arguments: {name: '', status: 'failed',reason: ''}})}`);

  }  


});

....

test.afterEach(async ({ browser }) => {
    browser.close()
  });


The before/afterEach hooks keep resulting in error messages about the browser being abruptly closed. Is there a better way to open/close browsers for each test? I know that other testing frameworks have a config setting for restarting the browser. Or maybe there is another way to make the test results appear in the Browserstack Automate dashboard?

2
  • Hi, 1. Could you please try to add await browser.close(); in the afterEach block? 2. Please check out BrowserStack's PlayWright sample repo for example code, here: github.com/browserstack/playwright-browserstack/tree/main Commented May 24, 2023 at 11:36
  • @AshwaniPathak thanks for your comment. 1, I added await to the browser.close() in my afterEach hook posted above and I still have the same result as before ('Browser has been closed' error in Playwright/'Abrupt close' in Browserstack). 2. I cloned the example repo and get an error when trying to run it (' require(...).addTestCommand is not a function'), but looking through the code, it seems like it doesn't make use of before/afterEach hooks. Commented May 24, 2023 at 12:06

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.