Remote File Upload Protractor test Remote File Upload Protractor test selenium selenium

Remote File Upload Protractor test


First of all, for the file upload to work with remote selenium servers, you need the latest protractor (currently, 3.0.0) (which would have the latest selenium-webdriver nodejs package as a dependency).

Then, these two lines are crucial to be able to send files over the wire to the selenium node:

var remote = require('selenium-webdriver/remote');browser.setFileDetector(new remote.FileDetector());

And, now you should be able to upload files as if you are running tests locally.


Complete working test (tested on BrowserStack, works for me perfectly):

var path = require('path'),    remote = require('selenium-webdriver/remote');describe("File upload test", function () {    beforeEach(function () {        browser.setFileDetector(new remote.FileDetector());        browser.get("https://angular-file-upload.appspot.com/");    });    it("should upload an image", function () {        var input = element(by.model("picFile")),            uploadedThumbnail = $("img[ngf-src=picFile]");        // no image displayed        expect(uploadedThumbnail.isDisplayed()).toBe(true);        // assuming you have "test.jpg" right near the spec itself        input.sendKeys(path.resolve(__dirname, "test.jpg"));        // there is a little uploaded image displayed        expect(uploadedThumbnail.isDisplayed()).toBe(true);    });});

Also see relevant issues:


Thanks to @alecxe for his answer!

I just had this situation, trying to upload some files to BrowserStack. In my case I'm using Cucumber - Protractor - NodeJs - BrowserStack. This code is already tested, working in local env and BorwserStack.

let path = require('path');let remote = require('selenium-webdriver/remote');this.When(/^I upload a file$/, () => {    browser.setFileDetector(new remote.FileDetector());    var fileToUpload = '../image_with_title.jpg';    var absolutePath = path.join(__dirname, fileToUpload);    page.fileupload.sendKeys(absolutePath);});

The magic line is:

let remote = require('selenium-webdriver/remote');


This solution worked for me.The below two lines of code did the trick.

var remote = require('selenium-webdriver/remote');browser.setFileDetector(new remote.FileDetector());

I am able to upload the file remote server.