CodeceptJS icon indicating copy to clipboard operation
CodeceptJS copied to clipboard

Bug: using a "dynamic" restart=false with webdriverio backend leaves browser instances running

Open chris-miaskowski opened this issue 5 years ago • 6 comments

What are you trying to achieve?

I'm trying to configure a single feature to keep the browser open between tests. Configuring globally is not an option because our tests are not ready to handle that yet. I want to have some tests run with browser restart: true, and others with restart: false.

I'm running the following command:

codeceptjs run path-to-my-test

I expect the browser to close after tests are executed.

(All tests pass btw.)

What do you get instead?

Browser remains open after all tests finish.

 › [Suite Config] WebDriver {"restart":false}
 › Started SeleniumStandaloneLauncher
 › [Session] Starting singleton browser session
 › [Window Size] [object Object]

# ...
# irrelevant tests output 
# ....

   Emitted | test.after ([object Object])
 › [Session] cleaning cookies and localStorage
    Emitted | suite.after ([object Object])
 › [Suite Config] Reverted for WebDriver

  OK  | 7 passed   // 23s
    Emitted | global.result ([object Object])
    Emitted | global.after ([object Object])
 › Stopped SeleniumStandaloneLauncher

Provide test source code if related

Feature('Feature').config('WebDriver', {
  restart: false,
});

Details

  • CodeceptJS version: ^2.3.2
  • NodeJS Version: v10.15.3
  • Operating System: Ubuntu 19.04
  • Protractor || WebDriverIO || Nightmare version (if related): "@wdio/selenium-standalone-service": "^5.15.0",
  • Configuration file:
  helpers: {
    GraphQL: {
      endpoint: 'http://localhost:4060/graphql',
    },
    WebDriver: {
      url: 'http://localhost:4050/',
      browser: 'chrome',
      windowSize: 'maximize',
      version: chromeVersion,
      desiredCapabilities: {
        chromeOptions: {
          binary: process.env.CI ? void 0 : chromiumBinary.path,
          args: ['--disable-gpu'],
        },
      },
      smartWait: 5000,
    },
  },

Related but not the same: https://github.com/Codeception/CodeceptJS/issues/1069

chris-miaskowski avatar Nov 13 '19 11:11 chris-miaskowski

Howdy, any plans to fix this anytime soon? Is there anything I could do to help moving that forward?

chris-miaskowski avatar Nov 15 '19 10:11 chris-miaskowski

@chris-miaskowski make a PR would be a faster way 🎉

kobenguyent avatar Nov 15 '19 10:11 kobenguyent

I see the same behavior using Puppeteer helper, please see:

  Scenario Steps:
  
  - I.waitForText("fail me here", 10) at Test.<anonymous> (tests/TestName_test.js:46:11)
  
  
  
  Run with --verbose flag to see NodeJS stacktrace


  FAIL  | 1 passed, 2 failed   // 52s


and browser is still opened.

I am using: Feature('BlaBla @blabla').config({restart: false, keepCookies: true});

@DavertMik is there any chance to fix that issue?

Thanks! 🙂

grzegorzprzybylo avatar Jan 28 '20 11:01 grzegorzprzybylo

@chris-miaskowski make a PR would be a faster way

I have this in the back of my head. Once I finally get a chance to look into it would be helpful to get some directions. Does anyone know what should I be looking at in the code? More or less.

chris-miaskowski avatar Jan 28 '20 16:01 chris-miaskowski

@chris-miaskowski I quickly go thru code (I am not familiar with how it is implemented atm, I think @DavertMik can help us here) and I found latest fix around it here: https://github.com/Codeception/CodeceptJS/pull/1136 - maybe it will be helpful for you where you can dig.

grzegorzprzybylo avatar Jan 28 '20 17:01 grzegorzprzybylo

The same is happening whenever I use Feature('My test suite').config({ restart: false }); Tests runs perfectly, keeping the browser state between scenarios, as intended, but then it get's stuck with browser open after last test passes, breaking my CI/CD pipeline.

Using Puppeteer. I'm looking for a command to close the browser manually meanwhile. Is there any?

jedicwb avatar Jul 12 '21 12:07 jedicwb