【问题标题】:Intern WebDriver and PhantomJS实习生 WebDriver 和 PhantomJS
【发布时间】:2013-05-24 04:45:57
【问题描述】:

我在浏览器 (client.html) 中进行测试时编写了我的主要单元测试,现在我准备通过 Node 设置测试自动化,但是我还没有设置 Selenium 服务器,管理层将可能永远不会允许使用像 Sauce Labs 这样的第三方服务,所以我正在尝试使用它的 webdriver 模式通过 PhantomJS 运行实习生测试。

我正在使用以下选项运行 PhantomJS:

$ phantomjs --ignore-ssl-errors=true --web-security=false --webdriver=8910

我的实习生配置如下:

define({
  proxyPort: 9000,
  proxyUrl: 'http://localhost:9000/',
  environments: [
    {
      browserName: 'phantom',
      version: '1.9.0',
      platform: 'Linux'
    }
  ],
  webdriver: {
    host: 'localhost',
    port: 8910
  },
  maxConcurrency: 3,
  useSauceConnect: false,
  // ...
});

它似乎在大多数情况下都有效,但是我在我的测试中遇到了 AJAX 请求的问题。由于测试是通过 Intern 自己的服务器运行的,因此我添加了一个 AJAX 过滤器以确保将请求发送到正确的位置:

$.ajaxPrefilter(function (options) {
  options.url = serverName + options.url;
});

我仍然发现我的 AJAX 请求失败了。经过进一步检查,我发现请求没有被发送(AJAX 失败,readyState 为 0)。 PhantomJS 似乎没有提供比这更多的信息。 phantomjs--web-security=false 标志应该确保跨域请求是可能的,所以我不确定原因。

在 PhantomJS 中没有抛出特定的错误,提供给失败处理程序的唯一信息是“错误”状态。

编辑: 我试过在没有 jQuery 的情况下做一个手动 XMLHttpRequest,它成功了。很明显,这是 jQuery 的目的。启用crossDomain 并不能解决问题。

【问题讨论】:

    标签: javascript ajax phantomjs intern


    【解决方案1】:

    所以,由于我还没有完全弄清楚的原因,在 AJAX 配置中使用 method 而不是 type 解决了这个问题(我偶然发现了这个问题)。我不太明白为什么,因为method 只是 jQuery 中type 的别名:

    s.type = options.method || options.type || s.method || s.type;
    

    无论如何,这确实为我解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      相关资源
      最近更新 更多