Открытие файла с помощью транспортира

Каждый пример транспортира, который я могу найти в Интернете, похоже, использует browser.get с веб-URI.

browser.get('http://localhost:8000');

Я хотел бы использовать Selenium для простого перехода к пути file://, чтобы мне не нужен локальный веб-сервер для выполнения тестов. Все, что мне нужно, это простая HTML-страница и некоторые ресурсы.

Это, похоже, не работает.

browser.get('file:///Users/myusername/dev/mpproject/spec/support/index.html');

Когда я вставляю этот URI в окно браузера, я получаю HTML-страницу. Когда я пытаюсь открыть его с помощью транспортира, я получаю тайм-аут.

Как я могу запускать тесты на этой странице с помощью транспортира? Идеальный ответ будет работать с относительным пути к файлу из корня myproject.

Ответы

Ответ 1

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

По умолчанию Protractor использует data:text/html,<html></html> как resetUrl, но location.replace из протокола data: в file: недопустим (мы получим ошибку "недопустимый локальный ресурс" ), поэтому мы замените resetUrl на один с протоколом file::

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 root folder)
        browser.resetUrl = 'file://';
    }

    // ...
};

Если вы хотите запустить относительный путь к папке проекта, вы можете просто использовать инструменты Node.js, потому что Protractor работает в среде Node.js. Например, __dirname вернет абсолютный путь к каталогу, в котором сохранен конфигурационный файл Protractor. В результате используйте:

exports.config = {
    // ...

    baseUrl: 'file://' + __dirname + '/spec/support/index.html'

    // ...
};

Кроме того, если приложение XHR запрашивает некоторые конечные точки, которые не разрешены с помощью file:, вам может потребоваться запустить ваш тестовый браузер с пользовательскими флагами. В моем случае это был Chrome:

exports.config = {
    // ...

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

    // ...
}

Ответ 2

У меня была такая же ошибка и исправлена ​​исправлением Михаэля Радионова, но удаление baseUrl. Вот моя настройка:

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 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 */

    });

});

Ответ 3

Что такое журнал ошибок?

Это может быть связано с "Загрузка" angular. Для этого вы можете попробовать browser.driver.ignoreSynchronization = true;

Журнал ошибок наверняка поможет в попытке понять проблему.

Ответ 4

Я думаю, что есть ошибка опечатки. В методе "get" вы должны включить URL в двойные кавычки "".

Попробуйте использовать двойные кавычки, как показано ниже:

WebDriver driver=new FirefoxDriver();
driver.get('file:///E:/Programming%20Samples/HTML%20Samples/First%20Program.html');