| 45 | |
| 46 | // TODO: support setting locale |
| 47 | async setup(browserName: string, locale?: string) { |
| 48 | if (browser) return |
| 49 | this.browserName = browserName |
| 50 | |
| 51 | let capabilities = {} |
| 52 | const isSafari = browserName === "safari" |
| 53 | const isFirefox = browserName === "firefox" |
| 54 | const isIE = browserName === "internet explorer" |
| 55 | const isBrowserStack = BROWSERSTACK |
| 56 | const localSeleniumServer = SKIP_LOCAL_SELENIUM_SERVER !== "true" |
| 57 | |
| 58 | // install conditional packages globally so the entire |
| 59 | // monorepo doesn't need to rebuild when testing |
| 60 | let globalNodeModules: string |
| 61 | |
| 62 | if (isBrowserStack || localSeleniumServer) { |
| 63 | globalNodeModules = execSync("npm root -g").toString().trim() |
| 64 | } |
| 65 | |
| 66 | if (isBrowserStack) { |
| 67 | const {Local} = require(resolveFrom(globalNodeModules, "browserstack-local")) |
| 68 | browserStackLocal = new Local() |
| 69 | |
| 70 | const localBrowserStackOpts = { |
| 71 | key: process.env.BROWSERSTACK_ACCESS_KEY, |
| 72 | // Add a unique local identifier to run parallel tests |
| 73 | // on BrowserStack |
| 74 | localIdentifier: new Date().getTime(), |
| 75 | } |
| 76 | await new Promise<void>((resolve, reject) => { |
| 77 | browserStackLocal.start(localBrowserStackOpts, (err) => { |
| 78 | if (err) return reject(err) |
| 79 | console.log("Started BrowserStackLocal", browserStackLocal.isRunning()) |
| 80 | resolve() |
| 81 | }) |
| 82 | }) |
| 83 | |
| 84 | const safariOpts = { |
| 85 | os: "OS X", |
| 86 | os_version: "Mojave", |
| 87 | browser: "Safari", |
| 88 | } |
| 89 | const safariLegacyOpts = { |
| 90 | os: "OS X", |
| 91 | os_version: "Sierra", |
| 92 | browserName: "Safari", |
| 93 | browser_version: "10.1", |
| 94 | } |
| 95 | const ieOpts = { |
| 96 | os: "Windows", |
| 97 | os_version: "10", |
| 98 | browser: "IE", |
| 99 | } |
| 100 | const firefoxOpts = { |
| 101 | os: "Windows", |
| 102 | os_version: "10", |
| 103 | browser: "Firefox", |
| 104 | } |