TestCafe、HTTPS 和多浏览器测试

TestCafe, HTTPS and Multi-browser testing

我们正在开发一个 Web 应用程序,我们正在使用 Testcafe 1.5 创建 UI 测试。我们正在测试的所有网站都是 HTTPS。我们的测试在本地 运行 或在 SauceLabs 上进行(用于多浏览器测试)。

我们已经使用浏览器设置成功测试了很长时间:

本地Chrome版本为80,为此,我们使用如下代码:

   const selfSignedSertificate = require("openssl-self-signed-certificate");
   let hostrunner = "localhost"; # We change this to ip.address() if running on Sauce
   const sslOptions = ssl
      ? {
          key: selfSignedSertificate.key,
          cert: selfSignedSertificate.cert
        }
      : null;
    createTestCafe(hostrunner, 1337, 1338, sslOptions)

但是,如果我们尝试使用不同的浏览器,如下所示,它会失败。 Chrome 异常 - "Your connection is not private" 和 NET:ERR_CERT_COMMON_NAME_INVALID。或者 IE 异常 "This site is not secure" 和 DLG_FLAGS_INVALID_CA.

我尝试了以下代码来使用实际的网络服务器证书,但无济于事:

const fs = require('fs');
let hostrunner = "localhost"; # We change this to ip.address() if running on Sauce
const sslOptions = ssl
  ? {
      key: fs.readFileSync('ws-key.pem'),
      cert: fs.readFileSync('ws-cert.pem'),
      allowHTTP1: true
    }
  : null;
createTestCafe(hostrunner, 1337, 1338, sslOptions)

当 运行 针对本地 IE 时,浏览器抱怨的证书是 to/by 本地主机颁发的。当 运行 在 Chrome80 上针对 SauceLabs 时,浏览器抱怨的证书已颁发 to/by "Sauce Labs Tunnel Proxy"。

注意:我们也在使用 gherkin-testcafe 2.3.4

谁能指出我需要更改哪些内容才能解决这些问题?

基于TestCafe Test HTTPS and HTTP/2 Websites主题,您需要为每个浏览器明确设置一个标志,这样它们就不会限制使用自签名证书。

例如,在 Firefox 中,您可以切换 network.websocket.allowInsecureFromHTTPS 选项 (). For IE, you can specify a similar argument if it is available ()。

关于saucelab的测试,在运行测试时,你会希望传递相应的浏览器参数。但是,请注意,saucelabs 浏览器提供程序不支持将参数传递给浏览器别名 (https://github.com/DevExpress/testcafe-browser-provider-saucelabs/issues/48)。