From dc86347e9724b1c418b8113a7f369064caa36489 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Fri, 30 Jul 2021 23:55:00 -0400 Subject: [PATCH] Add browser stack support to selenium test --- .github/workflows/browserstack.yml | 34 ++++++++++++++++++++++++++++++ test/selenium.test.ts | 30 ++++++++++++++++++++++++-- 2 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/browserstack.yml diff --git a/.github/workflows/browserstack.yml b/.github/workflows/browserstack.yml new file mode 100644 index 0000000000..9a9abee476 --- /dev/null +++ b/.github/workflows/browserstack.yml @@ -0,0 +1,34 @@ +name: 'BrowserStack Test' +on: [push, pull_request] +jobs: + ubuntu-job: + name: 'BrowserStack Test on Ubuntu' + runs-on: ubuntu-latest # Can be self-hosted runner also + steps: + - name: 'BrowserStack Env Setup' # Invokes the setup-env action + uses: browserstack/github-actions/setup-env@master + with: + username: ${{ secrets.BROWSERSTACK_USERNAME }} + access-key: ${{ secrets.BROWSERSTACK_ACCESS_KEY }} + - name: 'BrowserStack Local Tunnel Setup' # Invokes the setup-local action + uses: browserstack/github-actions/setup-local@master + with: + local-testing: start + local-identifier: random + # The next 3 steps are for building the web application to be tested and starting the web server on the runner environment + - name: 'Checkout the repository' + uses: actions/checkout@v2 + + - name: Copy configuration + run: cp config.json.example config.json + + - name: 'Building web application to be tested' + run: npm install + # - name: 'Running application under test' + # run: npm test + - name: 'Running test on BrowserStack' + run: npm test + - name: 'BrowserStackLocal Stop' # Terminating the BrowserStackLocal tunnel connection + uses: browserstack/github-actions/setup-local@master + with: + local-testing: stop \ No newline at end of file diff --git a/test/selenium.test.ts b/test/selenium.test.ts index 530546fa60..1ae5a3b29a 100644 --- a/test/selenium.test.ts +++ b/test/selenium.test.ts @@ -24,9 +24,35 @@ async function setup(): Promise { const options = new Chrome.Options(); options.addArguments("--load-extension=" + Path.join(__dirname, "../dist/")); options.addArguments("--mute-audio"); - options.addArguments("--disable-features=PreloadMediaEngagementData, MediaEngagementBypassAutoplayPolicies") + options.addArguments("--disable-features=PreloadMediaEngagementData, MediaEngagementBypassAutoplayPolicies"); + + let driver; + if (process.env.BROWSERSTACK_BUILD_NAME) { + const capabilities = { + 'os': 'windows', + 'os_version': '10', + 'browserName': 'chrome', + 'browser_version' : 'latest', + 'browserstack.local': 'true', + 'build': process.env.BROWSERSTACK_BUILD_NAME, + 'project': process.env.BROWSERSTACK_PROJECT_NAME, + 'browserstack.localIdentifier': process.env.BROWSERSTACK_LOCAL_IDENTIFIER, + 'browserstack.user': process.env.BROWSERSTACK_USERNAME, + 'browserstack.key': process.env.BROWSERSTACK_ACCESS_KEY + } + + driver = await new Builder() + .usingServer('http://hub-cloud.browserstack.com/wd/hub') + .setChromeOptions(options) + .withCapabilities(capabilities) + .build(); + } else { + driver = await new Builder() + .forBrowser("chrome") + .setChromeOptions(options) + .build(); + } - const driver = await new Builder().forBrowser("chrome").setChromeOptions(options).build(); driver.manage().setTimeouts({ implicit: 5000 });