Opening a file with protractor Opening a file with protractor selenium selenium

Opening a file with protractor


I am posting the solution I've found in here which helped me run Protractor with a file protocol.

By default, Protractor use data:text/html,<html></html> as resetUrl, but location.replace from the data: to the file: protocol is not allowed (we'll get "not allowed local resource" error), so we replace resetUrl with one with the file: protocol:

exports.config = {    // ...    baseUrl: 'file:///absolute/path/to/your/project/index.html',    onPrepare: function() {        // By default, Protractor use data:text/html,<html></html> as resetUrl, but         // location.replace from the data: to the file: protocol is not allowed        // (we'll get ‘not allowed local resource’ error), so we replace resetUrl with one        // with the file: protocol (this particular one will open system's root folder)        browser.resetUrl = 'file://';    }    // ...};

If you want to run a relative path to your project folder, then you could just use Node.js tools, because Protractor runs in a Node.js environment. For example, __dirname will return an absolute path to a directory where your Protractor config file is saved. As a result use:

exports.config = {    // ...    baseUrl: 'file://' + __dirname + '/spec/support/index.html'    // ...};

Also, if you application does XHR requests to some endpoints, which are not allowed from file:, you may have to run your test browser with custom flags. In my case it was Chrome:

exports.config = {    // ...    capabilities: {        browserName: 'chrome',        chromeOptions: {            // --allow-file-access-from-files - allow XHR from file://            args: ['allow-file-access-from-files']        }    }    // ...}


I had the same error and fixed by applying Michael Radionov's fix but removing the baseUrl. Here is my setup:

protractor.config.js:

exports.config = {  capabilities: {    browserName: 'chrome'  },  specs: [    '*.js'  ],  onPrepare: function() {    // By default, Protractor use data:text/html,<html></html> as resetUrl, but     // location.replace from the data: to the file: protocol is not allowed    // (we'll get ‘not allowed local resource’ error), so we replace resetUrl with one    // with the file: protocol (this particular one will open system's root folder)    browser.ignoreSynchronization = true;    browser.waitForAngular();    browser.sleep(500);     browser.resetUrl = 'file:///';  }};

e2etest.js:

'use strict';describe("Buttons' tests are started", function() {    it('Should retrieve 20 records into table', function() {        browser.get('file:///C:/Users/path_to_file/index.html');        /* Test codes here */    });});


What is the error log?

This could be something related to 'Loading' angular. For that you can try browser.driver.ignoreSynchronization = true;

The error log will surely help in trying to understand the problem.