实习生WebDriver和PhantomJS

时间:2013-05-23 18:49:16

标签: javascript ajax phantomjs intern

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

我正在使用以下选项运行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似乎没有提供比这更多的信息。 --web-security=false的{​​{1}}标志应该确保跨域请求是可能的,因此我不确定原因。

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

修改 我尝试过没有jQuery的手动XMLHttpRequest,它运行成功。很明显这是jQuery的结尾。启用phantomjs无法解决问题。

1 个答案:

答案 0 :(得分:1)

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

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

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