intern icon indicating copy to clipboard operation
intern copied to clipboard

Different behavior for `browserVersion` and `version`

Open jason0x43 opened this issue 5 years ago • 3 comments

In Intern master, browserVersion and version are being handled differently, at least for MS Edge Chromium.

To test, create a test config with

"environments": {"browserName": "MicrosoftEdge", "version": "insider preview" }

Run npm test -- --config <your config> --show-config and note that the drivers list contains MicrosoftEdge.

Create or update a config to use "browserVersion": "insider preview", run the test command, and note that the drivers list contains MicrosoftEdgeChromium (which is what it's supposed to contain).

jason0x43 avatar Feb 24 '20 15:02 jason0x43

This is also an issue with browserStack, at least with Intern 4.x. { "browserName": "safari", "browserVersion": "latest" } gives an OS/Browser combination invalid error, whereas { "browserName": "safari", "version": "latest" } works as intended.

jason0x43 avatar Feb 25 '20 14:02 jason0x43

Hey @jason0x43 I created a PR to resolve this at #1117 however I'm unsure how to test to see if it worked. Where am I suppose to look for the driver list? I updated the intern.json file and ran npm test -- --show-config and got the output

{
  "$schema": "./schemas/config.json",
  "bail": false,
  "basePath": "/Users/sam/projects/intern/",
  "baseline": false,
  "benchmark": false,
  "browser": {
    "plugins": [
      {
        "script": "tests/support/globalUi.ts"
      },
      {
        "script": "tests/support/browserDom.ts"
      }
    ],
    "reporters": [],
    "suites": [
      "tests/benchmark/example.ts",
      "tests/unit/common/lib/Evented.ts",
      "tests/unit/common/lib/global.ts",
      "tests/unit/common/lib/request.ts",
      "tests/unit/common/lib/util.ts",
      "tests/unit/core/lib/BenchmarkTest.ts",
      "tests/unit/core/lib/Channel.ts",
      "tests/unit/core/lib/Deferred.ts",
      "tests/unit/core/lib/Environment.ts",
      "tests/unit/core/lib/Suite.ts",
      "tests/unit/core/lib/Test.ts",
      "tests/unit/core/lib/browser/util.ts",
      "tests/unit/core/lib/channels/Base.ts",
      "tests/unit/core/lib/channels/Http.ts",
      "tests/unit/core/lib/channels/WebSocket.ts",
      "tests/unit/core/lib/common/ErrorFormatter.ts",
      "tests/unit/core/lib/common/console.ts",
      "tests/unit/core/lib/common/path.ts",
      "tests/unit/core/lib/common/util.ts",
      "tests/unit/core/lib/executors/Browser.ts",
      "tests/unit/core/lib/executors/Executor.ts",
      "tests/unit/core/lib/interfaces/bdd.ts",
      "tests/unit/core/lib/interfaces/benchmark.ts",
      "tests/unit/core/lib/interfaces/object.ts",
      "tests/unit/core/lib/interfaces/tdd.ts",
      "tests/unit/core/lib/reporters/Console.ts",
      "tests/unit/core/lib/reporters/Dom.ts",
      "tests/unit/core/lib/reporters/Html.ts",
      "tests/unit/core/loaders/default.ts",
      "tests/unit/core/loaders/dojo.ts",
      "tests/unit/core/loaders/dojo2.ts",
      "tests/unit/core/loaders/esm.ts",
      "tests/unit/core/loaders/systemjs.ts"
    ]
  },
  "capabilities": {
    "idle-timeout": 60,
    "name": "intern"
  },
  "connectTimeout": 30000,
  "coverage": [
    "!src/browser/**/*.ts",
    "src/**/*.ts"
  ],
  "coverageVariable": "__coverage__",
  "debug": false,
  "defaultTimeout": 30000,
  "description": "Run tests on Node, excluding the benchmark tests",
  "environments": [
    {
      "browserName": "node"
    }
  ],
  "filterErrorStack": false,
  "functionalCoverage": true,
  "functionalRetries": 1,
  "functionalSuites": [
    "tests/functional/lib/ProxiedSession.ts",
    "tests/functional/webdriver/Command.ts",
    "tests/functional/webdriver/Element.ts",
    "tests/functional/webdriver/Server.ts",
    "tests/functional/webdriver/Session.ts",
    "tests/functional/webdriver/helpers/pollUntil.ts",
    "tests/functional/webdriver/helpers/pollUntilTruthy.ts",
    "tests/functional/webdriver/support/util.ts"
  ],
  "functionalTimeouts": {},
  "grep": "/(?:)/",
  "heartbeatInterval": 60,
  "instrumenterOptions": {},
  "internPath": "/Users/sam/projects/intern/_testIntern/",
  "loader": {
    "script": "default"
  },
  "maxConcurrency": null,
  "name": "node",
  "node": {
    "plugins": [
      {
        "script": "tests/support/globalUi.ts"
      },
      {
        "script": "tests/support/nodeDom.ts"
      },
      {
        "script": "source-map-support/register"
      }
    ],
    "reporters": [
      {
        "name": "runner",
        "options": {
          "hidePassed": ".",
          "hideSkipped": false
        }
      }
    ],
    "suites": [
      "tests/benchmark/example.ts",
      "tests/integration/tunnels/BrowserStackTunnel.ts",
      "tests/integration/tunnels/CrossBrowserTestingTunnel.ts",
      "tests/integration/tunnels/SauceLabsTunnel.ts",
      "tests/integration/tunnels/SeleniumTunnel.ts",
      "tests/integration/tunnels/TestingBotTunnel.ts",
      "tests/unit/common/lib/Evented.ts",
      "tests/unit/common/lib/global.ts",
      "tests/unit/common/lib/request.ts",
      "tests/unit/common/lib/util.ts",
      "tests/unit/core/bin/intern.ts",
      "tests/unit/core/lib/BenchmarkTest.ts",
      "tests/unit/core/lib/Channel.ts",
      "tests/unit/core/lib/Deferred.ts",
      "tests/unit/core/lib/Environment.ts",
      "tests/unit/core/lib/ProxiedSession.ts",
      "tests/unit/core/lib/Server.ts",
      "tests/unit/core/lib/Suite.ts",
      "tests/unit/core/lib/Test.ts",
      "tests/unit/core/lib/channels/Base.ts",
      "tests/unit/core/lib/channels/Http.ts",
      "tests/unit/core/lib/channels/WebSocket.ts",
      "tests/unit/core/lib/common/ErrorFormatter.ts",
      "tests/unit/core/lib/common/console.ts",
      "tests/unit/core/lib/common/path.ts",
      "tests/unit/core/lib/common/util.ts",
      "tests/unit/core/lib/executors/Executor.ts",
      "tests/unit/core/lib/executors/Node.ts",
      "tests/unit/core/lib/interfaces/bdd.ts",
      "tests/unit/core/lib/interfaces/benchmark.ts",
      "tests/unit/core/lib/interfaces/object.ts",
      "tests/unit/core/lib/interfaces/tdd.ts",
      "tests/unit/core/lib/middleware/filterUrl.ts",
      "tests/unit/core/lib/middleware/finalError.ts",
      "tests/unit/core/lib/middleware/instrument.ts",
      "tests/unit/core/lib/middleware/post.ts",
      "tests/unit/core/lib/middleware/resolveSuites.ts",
      "tests/unit/core/lib/middleware/unhandled.ts",
      "tests/unit/core/lib/node/ErrorFormatter.ts",
      "tests/unit/core/lib/node/util.ts",
      "tests/unit/core/lib/reporters/Benchmark.ts",
      "tests/unit/core/lib/reporters/Cobertura.ts",
      "tests/unit/core/lib/reporters/Console.ts",
      "tests/unit/core/lib/reporters/Coverage.ts",
      "tests/unit/core/lib/reporters/HtmlCoverage.ts",
      "tests/unit/core/lib/reporters/JUnit.ts",
      "tests/unit/core/lib/reporters/JsonCoverage.ts",
      "tests/unit/core/lib/reporters/Lcov.ts",
      "tests/unit/core/lib/reporters/Pretty.ts",
      "tests/unit/core/lib/reporters/Reporter.ts",
      "tests/unit/core/lib/reporters/Runner.ts",
      "tests/unit/core/lib/reporters/Simple.ts",
      "tests/unit/core/lib/reporters/TeamCity.ts",
      "tests/unit/core/lib/reporters/TextCoverage.ts",
      "tests/unit/core/loaders/default.ts",
      "tests/unit/core/loaders/dojo.ts",
      "tests/unit/core/loaders/dojo2.ts",
      "tests/unit/core/loaders/esm.ts",
      "tests/unit/core/loaders/systemjs.ts",
      "tests/unit/core/tasks/intern.ts",
      "tests/unit/index.ts",
      "tests/unit/tunnels/BrowserStackTunnel.ts",
      "tests/unit/tunnels/CrossBrowserTestingTunnel.ts",
      "tests/unit/tunnels/SauceLabsTunnel.ts",
      "tests/unit/tunnels/SeleniumTunnel.ts",
      "tests/unit/tunnels/TestingBotTunnel.ts",
      "tests/unit/tunnels/Tunnel.ts",
      "tests/unit/tunnels/lib/util.ts",
      "tests/unit/webdriver/lib/util.ts"
    ],
    "tsconfig": "tsconfig.json"
  },
  "plugins": [],
  "reporters": [
    {
      "name": "runner"
    }
  ],
  "runInSync": false,
  "serveOnly": false,
  "serverPort": 9000,
  "serverUrl": "http://localhost:9000/",
  "sessionId": "",
  "showConfig": true,
  "socketPort": 9001,
  "tunnel": "selenium",
  "tunnelOptions": {
    "drivers": [],
    "tunnelId": "1582938871769"
  }
}

samends avatar Feb 29 '20 01:02 samends

tunnelOptions.drivers is the driver list. However, it won't be automatically populated if there are no browsers in the environments list, so you need to create a test config (or use an existing one) that has one or more browsers in the environments list.

You can verify the original issue by just providing an environment on the command line:

$ npm test -- --show-config --environments '{"browserName":"MicrosoftEdge", "version":"insider preview"}'

and

$ npm test -- --show-config --environments '{"browserName":"MicrosoftEdge", "browserVersion":"insider preview"}'

In current master, the first will give you a tunnelOptions.drivers value of

  "tunnelOptions": {
    "drivers": [
      {
        "name": "MicrosoftEdge"
      }
    ],
    "tunnelId": "1583422526883"
  }

while the second gives you

  "tunnelOptions": {
    "drivers": [
      {
        "name": "MicrosoftEdgeChromium"
      }
    ],
    "tunnelId": "1583422594091"
  }

With this PR, both commands return the expected driver of "MicrosoftEdgeChromium". 🎉

jason0x43 avatar Mar 05 '20 15:03 jason0x43