实习生WebDriver和PhantomJS[英] Intern WebDriver and PhantomJS

问题描述

我在浏览器 (client.html) 中测试时编写了主要单元测试,现在我准备通过 Node 设置测试自动化,但是我还没有设置 Selenium 服务器,管理将可能永远不会同意使用像 Sauce Labs 这样的第三方服务,所以我尝试使用它的 webdriver 模式通过 PhantomJS 运行 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 似乎没有提供比这更多的信息.phantomjs 的 --web-security=false 标志应该确保跨域请求是可能的,所以我不确定原因.

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

编辑:我尝试在没有 jQuery 的情况下执行手动 XMLHttpRequest,并且成功运行.很明显,这是 jQuery 的结局.启用 crossDomain 并不能修复它.

推荐答案

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

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

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

本文地址:https://www.itbaoku.cn/post/1740180.html