用量角器打开文件

时间:2014-07-18 11:58:25

标签: javascript selenium selenium-webdriver protractor

我可以在互联网上找到的每个量角器示例似乎都使用browser.get和网址。

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

我想使用Selenium简单导航到file://路径,这样我就不需要运行本地Web服务器来执行测试。我只需要一个简单的HTML页面和一些资产。

但这似乎不起作用。

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

当我将该URI粘贴到浏览器窗口时,我会得到一个HTML页面。当我尝试用量角器打开它时,我会暂停。

如何使用量角器在此页面上运行测试?理想的答案将使用myproject根目录的相对文件路径。

4 个答案:

答案 0 :(得分:15)

我发布的解决方案found in here帮我运行了带有文件协议的Protractor。

  

默认情况下,量角器使用data:text/html,<html></html>作为resetUrl,但不允许location.replacedata:协议的file:(我们会这样做)获取&#34;不允许本地资源&#34;错误),因此我们将resetUrl替换为file:协议的<{1}}:

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://';
    }

    // ...
};

如果要运行项目文件夹的相对路径,那么可以使用Node.js工具,因为Protractor在Node.js环境中运行。例如,__dirname将返回保存Protractor配置文件的目录的绝对路径。结果使用:

exports.config = {
    // ...

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

    // ...
};

此外,如果您的应用程序对file:不允许的某些端点执行XHR请求,则可能必须使用自定义标志运行测试浏览器。就我而言,它是Chrome:

exports.config = {
    // ...

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

    // ...
}

答案 1 :(得分:5)

我遇到了同样的错误并通过应用Michael Radionov修复但修复了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'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 */

    });

});

答案 2 :(得分:1)

错误日志是什么?

这可能与“加载”有关。角。为此你可以尝试 browser.driver.ignoreSynchronization = true;

错误日志肯定有助于理解问题。

答案 3 :(得分:-4)

我认为有错字错误。在&#34; get&#34;您应该在双引号&#34;&#34;。

中包含URL

尝试使用如下双引号:

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