Every protractor example I can find on the internet seems to use browser.get with a web URI.
browser.get('http://localhost:8000');
I'd like to use Selenium to simple navigate to a file:// path so that I don't need a local web server running in order to perform tests. All I need is a simple HTML page and some assets.
That doesn't seem to work though.
browser.get('file:///Users/myusername/dev/mpproject/spec/support/index.html');
When I paste that URI into my browser window I get a HTML page. When I try to open it with protractor I get a timeout.
How can I run tests on this page with protractor? The ideal answer will work with a relative file path from the myproject root.
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>asresetUrl, butlocation.replacefrom thedata:to thefile:protocol is not allowed (we'll get "not allowed local resource" error), so we replaceresetUrlwith one with thefile: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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With