google-chromeember.jsgoogle-chrome-extensiontestem

launch testem chrome browser with specific extension(s)


I am trying to have Testem launching my tests into Chrome browser with specific extension(s) loaded, but by default it's a blank Chrome profile which is started, and which doesn't persist extensions from one run to another.

My goal is for example having Testem to launch the Chrome browser pre-loaded with the Ember Inspector so that I can debug tests using that tool.

I wanted to know if that is possible, and if so, how.


Solution

  • Unfortunately there doesn't seem to be a built-in way that I can find.

    If you want a quick and dirty solution, I recommend the following:

    The available browsers in testem are defined in testem/lib/browser_launcher.js If you want to modify the file that ember-cli uses, this will be the full path:

    <your-app-dir>/node_modules/ember-cli/node_modules/testem/lib/browser_launcher.js
    

    This file has a function called browsersForPlatform(). Find your platform and the entry for Chrome. For Darwin the relevant entry is as follows:

          {
            name: "Chrome", 
            exe: "/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome", 
            args: ["--user-data-dir=" + tempDir + "/testem.chrome", "--no-default-browser-check", "--no-first-run", "--ignore-certificate-errors"],
            setup: function(config, done){
              rimraf(tempDir + '/testem.chrome', done)
            },
            supported: browserExeExists
          },
    

    You'll want to change the args so it gets called as you like. My guess is the problem is that --user-data-dir points to a tmp directory. Perhaps simply removing this will solve the problem.

    Ideally, testem would offer a way in the testem.json file to override browser options. This would probably be a reasonably straightforward contribution to the testem project if you're interested and there is interest among the maintainers.

    If you go the route of changing browser_launcher.js just remember that it will get clobbered every time the node package gets updated. I assume there is a way you can install a forked version and then keep your copy up to date as you see fit.