Skip to content

Commit

Permalink
Added safari tests
Browse files Browse the repository at this point in the history
Got it working locally, but could not get it working with sauce-labs
  • Loading branch information
tompahoward committed Nov 1, 2020
1 parent cc6af68 commit 21623e5
Show file tree
Hide file tree
Showing 15 changed files with 138 additions and 23 deletions.
1 change: 1 addition & 0 deletions .nycrc-browser-api-chrome-local.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ exclude:
- 'scripts/**/*.js'
- 'coverage/**/*.js'
- 'src/test/clients/waychaser-via-webdriver-firefox.js'
- 'src/test/clients/waychaser-via-webdriver-safari.js'
- 'src/test/clients/waychaser-via-webdriver-saucy.js'
check-coverage: false

Expand Down
1 change: 1 addition & 0 deletions .nycrc-browser-api-firefox-local.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ exclude:
- 'scripts/**/*.js'
- 'coverage/**/*.js'
- 'src/test/clients/waychaser-via-webdriver-chrome.js'
- 'src/test/clients/waychaser-via-webdriver-safari.js'
- 'src/test/clients/waychaser-via-webdriver-saucy.js'
check-coverage: false

Expand Down
17 changes: 17 additions & 0 deletions .nycrc-browser-api-safari-local.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
extends: '@istanbuljs/nyc-config-babel'
all: true
skip-full: false
exclude:
- 'lib/**/*.js'
- 'dist/**/*.js'
- 'scripts/**/*.js'
- 'coverage/**/*.js'
- 'src/test/clients/waychaser-via-webdriver-chrome.js'
- 'src/test/clients/waychaser-via-webdriver-firefox.js'
- 'src/test/clients/waychaser-via-webdriver-saucy.js'
check-coverage: false

reporter:
- text-summary
- lcov
- text
17 changes: 17 additions & 0 deletions .nycrc-browser-api-safari-saucy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
extends: '@istanbuljs/nyc-config-babel'
all: true
skip-full: false
exclude:
- 'lib/**/*.js'
- 'dist/**/*.js'
- 'scripts/**/*.js'
- 'coverage/**/*.js'
- 'src/test/clients/waychaser-via-webdriver-firefox.js'
- 'src/test/clients/waychaser-via-webdriver-chrome.js'
- 'src/test/clients/waychaser-via-webdriver-local.js'
check-coverage: false

reporter:
- text-summary
- lcov
- text
7 changes: 7 additions & 0 deletions cucumber.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,11 @@ module.exports = {
'firefox',
'Windows 10'
),
'browser-api-safari-local': generateConfig('browser-api-safari-local'),
'browser-api-safari-saucy': generateConfig(
'browser-api-safari-saucy',
'browser-api-saucy',
'safari',
'macOS 10.15'
),
};
22 changes: 14 additions & 8 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@
"test:browser-api:chrome:saucy": "scripts/test-browser.sh",
"test:browser-api:firefox:local": "scripts/test-browser.sh",
"test:browser-api:firefox:saucy": "scripts/test-browser.sh",
"test:browser-api:safari:local": "scripts/test-browser.sh",
"test:browser-api:safari:saucy": "scripts/test-browser.sh",
"test:browser-api": "scripts/for-all-browsers.sh",
"test": "npm-run-all --sequential ${npm_lifecycle_event}:*",
"watch:test:node-api": "nodemon -V -x npm -- run ${npm_lifecycle_event#watch:}",
Expand All @@ -60,6 +62,8 @@
"cover:browser-api:chrome:saucy": "scripts/cover.sh",
"cover:browser-api:firefox:local": "scripts/cover.sh",
"cover:browser-api:firefox:saucy": "scripts/cover.sh",
"cover:browser-api:safari:local": "scripts/cover.sh",
".cover:browser-api:safari:saucy": "scripts/cover.sh",
"cover:browser-api": "scripts/for-all-browsers.sh",
"cover": "scripts/cover-all.sh",
"eslint-check": "eslint --print-config src/server/index.js | eslint-config-prettier-check",
Expand All @@ -72,9 +76,9 @@
"/dist/*.js.map"
],
"dependencies": {
"cross-fetch": "^3.0.4",
"debug": "^4.1.1",
"http-link-header": "^1.0.2",
"isomorphic-fetch": "^3.0.0",
"shellcheck": "^0.4.4",
"url-polyfill": "^1.1.7"
},
Expand Down
11 changes: 10 additions & 1 deletion scripts/test-browser.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,19 @@
TESTING="${npm_lifecycle_event#test:}"
TEST_PROFILE="${TESTING//:/-}"

BROWSER_AND_MODE="${npm_lifecycle_event#test:browser-api:}"
MODE="${BROWSER_AND_MODE#*:}"
BROWSER="${BROWSER_AND_MODE%:*}"

if [[ "$BROWSER" != "safari" || "$MODE" != "local" || "$OSTYPE" == "darwin"* ]]; then
NODE_ENV=test \
PORT=${npm_package_config_TEST_API_PORT} \
UI_PORT=${npm_package_config_TEST_BROWSER_PORT} \
start-server-and-test \
browser:test \
"http://localhost:${npm_package_config_TEST_BROWSER_PORT}" \
"cucumber-js -p ${TEST_PROFILE}"
"cucumber-js -p ${TEST_PROFILE}"
else
echo "Cannot execute local safari tests on $OSTYPE. Skipping..."
fi

4 changes: 4 additions & 0 deletions src/test/clients/waychaser-via-webdriver-firefox.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ class WaychaserViaWebdriverFirefox extends WaychaserViaWebdriverLocal {
setBrowserOptions(builder, options) {
return builder.forBrowser('firefox').setChromeOptions(options);
}

async getBrowserLogs() {
// getting logs is not possible with firefox
}
}

const instance = new WaychaserViaWebdriverFirefox();
Expand Down
12 changes: 6 additions & 6 deletions src/test/clients/waychaser-via-webdriver-local.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import logging from 'selenium-webdriver/lib/logging';

import logger from '../../util/logger';

const screen = {
width: 1024,
height: 800,
};
// const screen = {
// width: 1024,
// height: 800,
// };

class WaychaserViaWebdriverLocal extends WaychaserViaWebdriver {
async load(url, options) {
Expand All @@ -20,7 +20,7 @@ class WaychaserViaWebdriverLocal extends WaychaserViaWebdriver {
async getBrowser() {
try {
const options = this.getBrowserOptions();
options.windowSize(screen);
//options.windowSize(screen);
/* istanbul ignore next: only get's executed on CI server*/
if (process.env.CI) {
options.headless();
Expand All @@ -43,7 +43,7 @@ class WaychaserViaWebdriverLocal extends WaychaserViaWebdriver {
{
/* istanbul ignore next: only get's executed when there are web driver issues*/
{
logger.error('error getting broswer', error);
logger.error('error getting browser', error);
throw error;
}
}
Expand Down
23 changes: 23 additions & 0 deletions src/test/clients/waychaser-via-webdriver-safari.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import safari from 'selenium-webdriver/safari';
// eslint-disable-next-line no-unused-vars
import logger from '../../util/logger';
import { WaychaserViaWebdriverLocal } from './waychaser-via-webdriver-local';

class WaychaserViaWebdriverSafari extends WaychaserViaWebdriverLocal {
getBrowserOptions() {
return new safari.Options();
}

setBrowserOptions(builder, options) {
return builder.forBrowser('safari').setSafariOptions(options);
}

async getBrowserLogs() {
// getting logs is not possible wtih safari
// https://stackoverflow.com/questions/46272218/unable-to-console-logs-from-safari-using-selenium-webdriver-python
}
}

const instance = new WaychaserViaWebdriverSafari();

export { instance as waychaserViaWebdriverSafari };
14 changes: 10 additions & 4 deletions src/test/clients/waychaser-via-webdriver-saucy.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,7 @@ class WaychaserViaWebdriverSaucy extends WaychaserViaWebdriver {
accessKey: accessKey,
build: BUILD,
name,
/* As a best practice, set important test metadata and execution options
such as build info, tags for reporting, and timeout durations.
*/
extendedDebugging: true,
maxDuration: 3600,
idleTimeout: 1000,
tags: tags,
Expand All @@ -76,10 +74,18 @@ class WaychaserViaWebdriverSaucy extends WaychaserViaWebdriver {
}
/* istanbul ignore next: only get's executed when there are web driver issues */
catch(error) {
logger.error('error getting broswer', error);
logger.error('error getting browser', error);
throw error;
}

async getBrowserLogs() {
// getting logs is not possible wtih safari
// https://stackoverflow.com/questions/46272218/unable-to-console-logs-from-safari-using-selenium-webdriver-python
if (this.browser != 'safari' && this.browser != 'firefox') {
super.getBrowserLogs();
}
}

async sendTestResult(result) {
await this.driver.executeScript(`sauce:job-result=${result}`);
}
Expand Down
22 changes: 20 additions & 2 deletions src/test/clients/waychaser-via-webdriver.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import humanizeDuration from 'humanize-duration';
import core from 'istanbul-middleware/lib/core';
import logger from '../../util/logger';
import logging from 'selenium-webdriver/lib/logging';

class WaychaserViaWebdriver {
async load(url, options) {
Expand All @@ -12,23 +13,40 @@ class WaychaserViaWebdriver {
.load(arguments[0], arguments[1])
.then((success) => {
console.log({ success });
return { success };
return { success, result: 'success' };
})
.catch((error) => {
console.log({ error });
return { error };
return { error, result: 'error' };
});
},
url,
options
);

await this.getBrowserLogs();

logger.debug(`result:`, result);
if (result.error) {
logger.debug(result.error);
throw new Error(result.error);
}
return result.success;
}

async getBrowserLogs() {
await this.driver
.manage()
.logs()
.get(logging.Type.BROWSER)
.then((entries) => {
entries.forEach((entry) => {
logger.browser('[%s] %s', entry.level.name, entry.message);
});
return;
});
}

/* istanbul ignore next: only get's executed on test failure */
async allowDebug(timeout) {
if (this.driver) {
Expand Down
2 changes: 2 additions & 0 deletions src/test/world.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { waychaser } from '../../dist/waychaser';
import { waychaserViaWebdriverChrome } from './clients/waychaser-via-webdriver-chrome';
import { waychaserViaWebdriverFirefox } from './clients/waychaser-via-webdriver-firefox';
import { waychaserViaWebdriverSaucy } from './clients/waychaser-via-webdriver-saucy';
import { waychaserViaWebdriverSafari } from './clients/waychaser-via-webdriver-safari';

chai.use(chaiAsPromised);

Expand Down Expand Up @@ -92,6 +93,7 @@ function world({ attach, parameters }) {
'node-api': waychaser,
'browser-api-chrome-local': waychaserViaWebdriverChrome,
'browser-api-firefox-local': waychaserViaWebdriverFirefox,
'browser-api-safari-local': waychaserViaWebdriverSafari,
'browser-api-saucy': waychaserViaWebdriverSaucy,
};
this.waychaser = clients[this.parameters.client];
Expand Down
2 changes: 1 addition & 1 deletion src/waychaser.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import fetch from 'cross-fetch';
import fetch from 'isomorphic-fetch';

class ApiResourceObject {}

Expand Down

0 comments on commit 21623e5

Please sign in to comment.