Тест удаленной загрузки файлов Protractor

Я пишу тесты в транспортире, который представляет собой фреймворк на основе JS и тестовый стек селена для запуска тестов. Я столкнулся с проблемой, когда мне нужно протестировать загрузку файла.

Проблема, с которой я сталкиваюсь, - это файл, который я пытаюсь загрузить, находится в тестовом пакете, тогда как узел селена является отдельным сервером, поэтому он не получит файл. Я пробовал использовать дескриптор файла, хотя имя файла задано, содержимое не загружается.

Ниже приведен фрагмент кода, который у меня есть.

  var remote = require('selenium-webdriver/remote');
   browser.setFileDetector(new remote.FileDetector());
   var absolutePath = path.resolve(__dirname, "../specs/data/baseProducts.csv");
   $('input[type="file"]').sendKeys(absolutePath);

Есть ли у вас какие-либо материалы для этого? Или вы знаете кого-нибудь, кто писал тесты загрузки файлов на JS с использованием селена? Мы будем очень благодарны за вашу помощь


person jammy    schedule 11.12.2015    source источник


Ответы (3)


Прежде всего, чтобы загрузка файла работала с удаленными серверами Selenium, вам понадобится последняя версия protractor (в настоящее время 3.0.0) (которая будет иметь последний пакет selenium-webdriver nodejs в качестве зависимости).

Затем эти две строки имеют решающее значение для отправки файлов по сети на узел селена:

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

И теперь у вас должна быть возможность загружать файлы, как если бы вы запускали тесты локально.


Полный рабочий тест (протестирован на BrowserStack, у меня отлично работает):

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);
    });
});

Также см. Соответствующие вопросы:

person alecxe    schedule 19.12.2015
comment
Мне пришлось загрузить файлы в несколько разных файлов спецификаций, поэтому я добавил их в раздел onPrepare() файла protractor.config. Работает отлично. Спасибо за ответ. - person HaC; 26.02.2018

Спасибо @alecxe за ответ!

У меня была такая ситуация, когда я пытался загрузить файлы в BrowserStack. В моем случае я использую Cucumber - Protractor - NodeJs - BrowserStack. Этот код уже протестирован, работает в локальном env и 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);
});

Магическая линия:

let remote = require('selenium-webdriver/remote');
person Zicury    schedule 20.02.2018

Это решение сработало для меня. Следующие две строки кода сделали свое дело.

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

Я могу загрузить файл на удаленный сервер.

person Saravanan N    schedule 28.08.2020