codeceptjs / CodeceptJS

Supercharged End 2 End Testing Framework for NodeJS
http://codecept.io
MIT License
4.11k stars 725 forks source link

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

Open chris-miaskowski opened 5 years ago

chris-miaskowski commented 5 years ago

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

  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 commented 4 years ago

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

kobenguyent commented 4 years ago

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

grzegorzprzybylo commented 4 years ago

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! 🙂

chris-miaskowski commented 4 years ago

@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.

grzegorzprzybylo commented 4 years ago

@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.

jedicwb commented 3 years ago

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?