Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

keep protractor browser session alive

I have looked everywhere but it looks like I am only person asking this.

How to keep browser session in protractor alive, not to have to login everytime I run a test. I have put login logics in onPrepare to avoid logging for every test function

onPrepare: function() {
    var mymodule = require("./e2e/mymodule");
    mymodule.login();
    mymodule.switchToProject("someproject");
}

But still logging in takes 3-4 seconds for every time I run protractor which I would like to skip. Any idea's ?

I prefer a solution for chromeOnly: true setting but a solution for seperate selenium server would be fine as well

like image 661
papoola Avatar asked Sep 09 '14 08:09

papoola


2 Answers

Protractor creates a brand new Chrome profile every time it runs. Before messing with this, you need to be aware that this provides reliability for your tests: they will run the same way every time because they are starting from a blank slate. If you decide to use a persistent profile that is already logged in, then your Protractor tests will start failing as soon as the login expires, the profile gets deleted, or you try to run them on a different computer.

That said, there is a way to ask Chrome to reuse the same profile (including cookies and all settings) for each run of Protractor tests. In your protractor.conf.js you'll do something like this:

capabilities: {
    'browserName': 'chrome',
    'chromeOptions': {
        'args': ['--user-data-dir=/a/random/path']
    }
}

The 'args' here is the operative part. It lets you pass command-line arguments to Protractor's version of Chrome when it starts up (for example, you could pass in '--start-maximized' to maximize Chrome on startup).

Replace /a/random/path with any file path (starting from root) on your system. Just make sure the folders you're referencing have been created. You don't need to use your own Chrome profile path--that's just unnecessary hassle. Create a folder somewhere and use it.

When Protractor starts Chrome, its profile will be in the location you specified, and it will continue to use it as long as your path remains unchanged.

Keep in mind that this is a browser operation, not at all related to what Selenium or Protractor is doing. I don't know if there is a way to do this with Firefox or other browsers, since each one ostensibly has its own way of storing user profiles.

like image 117
Isaac Lyman Avatar answered Nov 06 '22 00:11

Isaac Lyman


How to keep browser session in protractor alive, not to have to login everytime I run a test. I have put login logics in onPrepare to avoid logging for every test function

The best choice is to start the Chrome browser session your self, and then provide the session id to protractor.

There are multiple ways of doing this

  1. Using a script to start the browser - e.g. webdriver-reuse-session that I have created, and I will expand it for better support for this problem.
  2. Use the Selenium Standalone Web interface at

Let me know if this solves your problem.

like image 1
AndreasM_DK Avatar answered Nov 06 '22 00:11

AndreasM_DK