blob: 739a916ca3b6694224b38b2011075f3c8115098d [file] [log] [blame]
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
'use strict'
const fs = require('node:fs')
const os = require('node:os')
const path = require('node:path')
const { Browser } = require('selenium-webdriver/index')
const { Environment } = require('selenium-webdriver/testing')
const chrome = require('selenium-webdriver/chrome')
const firefox = require('selenium-webdriver/firefox')
const { runfiles } = require('@bazel/runfiles')
function GetBrowserForTests() {
let browser = process.env.SELENIUM_BROWSER
// If we have no browser set, fail the build
if (!browser) {
throw new Error('SELENIUM_BROWSER env var not set')
}
if (browser.indexOf(',') !== -1) {
throw new Error('SELENIUM_BROWSER env var must only be a single browser')
}
/** @type !TargetBrowser */
const targetBrowser = { name: browser, capabilities: undefined }
const builder = new Environment(targetBrowser).builder()
builder.disableEnvironmentOverrides()
let binary = process.env.BROWSER_BINARY
let driverBinary = process.env.DRIVER_BINARY
let resolvedBinary = binary ? runfiles.resolve(driverBinary) : undefined
let resolvedDriver = driverBinary ? runfiles.resolve(binary) : undefined
// Create a temporary directory we can use as a home dir
// process.env["USER"] = "nobody"
process.env['HOME'] = fs.mkdtempSync(path.join(os.tmpdir(), 'jasmine-test'))
switch (browser) {
case 'chrome':
builder.forBrowser(Browser.CHROME)
if (resolvedDriver) {
let sb = new chrome.ServiceBuilder(resolvedDriver)
sb.enableVerboseLogging()
sb.setStdio('inherit')
builder.setChromeService(sb)
}
if (resolvedBinary) {
let options = new chrome.Options()
options.setChromeBinaryPath(resolvedBinary)
options.setAcceptInsecureCerts(true)
options.addArguments('disable-infobars', 'disable-breakpad', 'disable-dev-shm-usage', 'no-sandbox')
builder.setChromeOptions(options)
}
break
// case 'edge':
// builder = builder.forBrowser(webdriver.Browser.EDGE)
// break
//
case 'firefox':
builder.forBrowser(Browser.FIREFOX)
if (resolvedDriver) {
let sb = new firefox.ServiceBuilder(resolvedDriver)
sb.enableVerboseLogging(true)
sb.setStdio('inherit')
builder.setFirefoxService(sb)
}
if (resolvedBinary) {
let options = new firefox.Options()
options.setBinary(resolvedBinary)
options.enableDebugger()
builder.setFirefoxOptions(options)
}
break
case 'safari':
builder.forBrowser(Browser.SAFARI)
break
default:
throw new Error('SELENIUM_BROWSER does not list a supported browser')
}
return builder.build()
}
module.exports = {
GetBrowserForTests,
}