From b616d4220a24a6ed65b1325141f96a3cbf2cfd56 Mon Sep 17 00:00:00 2001 From: Miles Malerba Date: Thu, 25 Mar 2021 12:56:51 -0700 Subject: [PATCH 1/5] test(cdk/testing): Get webdriver test suite running with dummy tests --- src/cdk/testing/tests/BUILD.bazel | 19 +++++++++++- src/cdk/testing/tests/webdriver.e2e.spec.ts | 32 +++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/cdk/testing/tests/webdriver.e2e.spec.ts diff --git a/src/cdk/testing/tests/BUILD.bazel b/src/cdk/testing/tests/BUILD.bazel index 73084408e73e..61edabf538e8 100644 --- a/src/cdk/testing/tests/BUILD.bazel +++ b/src/cdk/testing/tests/BUILD.bazel @@ -1,4 +1,4 @@ -load("//tools:defaults.bzl", "ng_e2e_test_library", "ng_module", "ng_test_library", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test", "ng_e2e_test_library", "ng_module", "ng_test_library", "ts_library") package(default_visibility = ["//visibility:public"]) @@ -77,3 +77,20 @@ ng_e2e_test_library( "//src/cdk/testing/protractor", ], ) + +ts_library( + name = "webdriver_test_lib", + testonly = 1, + srcs = ["webdriver.e2e.spec.ts"], + deps = [ + "@npm//@types/selenium-webdriver", + "@npm//@types/jasmine", + "@npm//@types/node", + ], +) + +jasmine_node_test( + name = "webdriver_test", + data = ["@npm//:node_modules"], + deps = [":webdriver_test_lib"], +) diff --git a/src/cdk/testing/tests/webdriver.e2e.spec.ts b/src/cdk/testing/tests/webdriver.e2e.spec.ts new file mode 100644 index 000000000000..5c874b72dd07 --- /dev/null +++ b/src/cdk/testing/tests/webdriver.e2e.spec.ts @@ -0,0 +1,32 @@ +import 'jasmine'; +import * as path from 'path'; +import {Builder, By, WebDriver} from 'selenium-webdriver'; +import {Options, ServiceBuilder} from 'selenium-webdriver/chrome'; + +describe('wait for Angular', () => { + let wd: WebDriver; + + beforeAll(async () => { + wd = await new Builder() + .forBrowser('chrome') + + // For local development only + .setChromeService(new ServiceBuilder(path.join(__dirname, 'chromedriver'))) + + .setChromeOptions( + new Options() + .headless() + ) + .build(); + }); + + afterAll(async () => { + await wd.quit(); + }); + + it('works', async () => { + await wd.get('https://material.angular.io'); + const header = await wd.findElement(By.css('.mat-h1')); + expect(await header.getText()).toBe('Angular Material'); + }); +}); From ee61bb69d3ba5fca20fc0be9cd578d5ef1ab3603 Mon Sep 17 00:00:00 2001 From: Paul Gschwendtner Date: Sat, 27 Mar 2021 21:08:29 +0100 Subject: [PATCH 2/5] test(cdk/testing): Get webdriver test running --- src/cdk/testing/tests/BUILD.bazel | 33 +++++++++++++---- src/cdk/testing/tests/webdriver.e2e.spec.ts | 39 +++++++++++++-------- tools/BUILD.bazel | 4 +++ 3 files changed, 55 insertions(+), 21 deletions(-) diff --git a/src/cdk/testing/tests/BUILD.bazel b/src/cdk/testing/tests/BUILD.bazel index 61edabf538e8..76bbb973f419 100644 --- a/src/cdk/testing/tests/BUILD.bazel +++ b/src/cdk/testing/tests/BUILD.bazel @@ -1,4 +1,5 @@ load("//tools:defaults.bzl", "jasmine_node_test", "ng_e2e_test_library", "ng_module", "ng_test_library", "ts_library") +load("@io_bazel_rules_webtesting//web:web.bzl", "web_test") package(default_visibility = ["//visibility:public"]) @@ -65,10 +66,13 @@ ng_test_library( ng_e2e_test_library( name = "e2e_test_sources", - srcs = glob([ - "**/*.e2e.spec.ts", - "**/*.spec.d.ts", - ]), + srcs = glob( + [ + "**/*.e2e.spec.ts", + "**/*.spec.d.ts", + ], + exclude = ["webdriver.e2e.spec.ts"], + ), deps = [ ":cross_environment_specs", ":test_harnesses", @@ -83,14 +87,29 @@ ts_library( testonly = 1, srcs = ["webdriver.e2e.spec.ts"], deps = [ - "@npm//@types/selenium-webdriver", "@npm//@types/jasmine", "@npm//@types/node", + "@npm//@types/selenium-webdriver", ], ) jasmine_node_test( - name = "webdriver_test", - data = ["@npm//:node_modules"], + name = "webdriver_node_test", + data = [ + "@npm//:node_modules", + ], + tags = ["manual"], deps = [":webdriver_test_lib"], ) + +web_test( + name = "webdriver_test_chrome", + browser = "@npm//@angular/dev-infra-private/browsers/chromium:chromium", + test = ":webdriver_node_test", +) + +web_test( + name = "webdriver_test_firefox", + browser = "@npm//@angular/dev-infra-private/browsers/firefox:firefox", + test = ":webdriver_node_test", +) diff --git a/src/cdk/testing/tests/webdriver.e2e.spec.ts b/src/cdk/testing/tests/webdriver.e2e.spec.ts index 5c874b72dd07..59bd26d1ed68 100644 --- a/src/cdk/testing/tests/webdriver.e2e.spec.ts +++ b/src/cdk/testing/tests/webdriver.e2e.spec.ts @@ -1,23 +1,33 @@ import 'jasmine'; -import * as path from 'path'; -import {Builder, By, WebDriver} from 'selenium-webdriver'; -import {Options, ServiceBuilder} from 'selenium-webdriver/chrome'; +import {Builder, By, Capabilities, WebDriver} from 'selenium-webdriver'; + +/** + * Metadata file generated by `rules_webtesting` for browser tests. + * The metadata provides configuration for launching the browser and + * necessary capabilities. See source for details: + * https://github.com/bazelbuild/rules_webtesting/blob/06023bb3/web/internal/metadata.bzl#L69-L82 + */ +interface WebTestMetadata { + capabilities: Capabilities; +} + +if (process.env['WEB_TEST_METADATA'] === undefined) { + console.log(`Test running outside of a "web_test" target. No browser found.`); + process.exit(1); +} + +const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']!); +const webTestMetadata: WebTestMetadata = + require(runfiles.resolve(process.env['WEB_TEST_METADATA'])); describe('wait for Angular', () => { let wd: WebDriver; beforeAll(async () => { wd = await new Builder() - .forBrowser('chrome') - - // For local development only - .setChromeService(new ServiceBuilder(path.join(__dirname, 'chromedriver'))) - - .setChromeOptions( - new Options() - .headless() - ) - .build(); + .usingServer(process.env.WEB_TEST_WEBDRIVER_SERVER!) + .withCapabilities(webTestMetadata.capabilities) + .build(); }); afterAll(async () => { @@ -27,6 +37,7 @@ describe('wait for Angular', () => { it('works', async () => { await wd.get('https://material.angular.io'); const header = await wd.findElement(By.css('.mat-h1')); - expect(await header.getText()).toBe('Angular Material'); + console.error(await wd.executeScript('return navigator.userAgent')); + expect(await header.getText()).toBe('Angular Matedrial'); }); }); diff --git a/tools/BUILD.bazel b/tools/BUILD.bazel index 741f53b8f2ec..e840652cdee6 100644 --- a/tools/BUILD.bazel +++ b/tools/BUILD.bazel @@ -16,6 +16,10 @@ platform( name: "dockerAddCapabilities" value: "SYS_ADMIN" } + properties: { + name: "dockerNetwork" + value: "standard" + } """, ) From 9eeb47428803c8a9799dea27cd76cc859694daf5 Mon Sep 17 00:00:00 2001 From: Miles Malerba Date: Mon, 29 Mar 2021 11:29:17 -0700 Subject: [PATCH 3/5] test(cdk/testing): Use a data URL in the placeholder test --- src/cdk/testing/tests/webdriver.e2e.spec.ts | 9 ++++----- tools/BUILD.bazel | 4 ---- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/cdk/testing/tests/webdriver.e2e.spec.ts b/src/cdk/testing/tests/webdriver.e2e.spec.ts index 59bd26d1ed68..76f186f277a6 100644 --- a/src/cdk/testing/tests/webdriver.e2e.spec.ts +++ b/src/cdk/testing/tests/webdriver.e2e.spec.ts @@ -20,7 +20,7 @@ const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']!); const webTestMetadata: WebTestMetadata = require(runfiles.resolve(process.env['WEB_TEST_METADATA'])); -describe('wait for Angular', () => { +describe('Webdriver test', () => { let wd: WebDriver; beforeAll(async () => { @@ -35,9 +35,8 @@ describe('wait for Angular', () => { }); it('works', async () => { - await wd.get('https://material.angular.io'); - const header = await wd.findElement(By.css('.mat-h1')); - console.error(await wd.executeScript('return navigator.userAgent')); - expect(await header.getText()).toBe('Angular Matedrial'); + await wd.get('data:text/html,Test'); + const body = await wd.findElement(By.css('body')); + expect(await body.getText()).toBe('Test test'); }); }); diff --git a/tools/BUILD.bazel b/tools/BUILD.bazel index e840652cdee6..741f53b8f2ec 100644 --- a/tools/BUILD.bazel +++ b/tools/BUILD.bazel @@ -16,10 +16,6 @@ platform( name: "dockerAddCapabilities" value: "SYS_ADMIN" } - properties: { - name: "dockerNetwork" - value: "standard" - } """, ) From 332067d3fa38a1e5956dd8aa9aa2e87fe80a874f Mon Sep 17 00:00:00 2001 From: Miles Malerba Date: Mon, 29 Mar 2021 11:43:41 -0700 Subject: [PATCH 4/5] test(cdk/testing): Classify as e2e tests --- src/cdk/testing/tests/BUILD.bazel | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cdk/testing/tests/BUILD.bazel b/src/cdk/testing/tests/BUILD.bazel index 76bbb973f419..6c34924c0ade 100644 --- a/src/cdk/testing/tests/BUILD.bazel +++ b/src/cdk/testing/tests/BUILD.bazel @@ -105,11 +105,13 @@ jasmine_node_test( web_test( name = "webdriver_test_chrome", browser = "@npm//@angular/dev-infra-private/browsers/chromium:chromium", + tags = ["e2e"], test = ":webdriver_node_test", ) web_test( name = "webdriver_test_firefox", browser = "@npm//@angular/dev-infra-private/browsers/firefox:firefox", + tags = ["e2e"], test = ":webdriver_node_test", ) From c9a4d7e3e8b7a9addf432e899b91fd9e27dc1ccc Mon Sep 17 00:00:00 2001 From: Miles Malerba Date: Mon, 29 Mar 2021 12:45:26 -0700 Subject: [PATCH 5/5] test(cdk/testing): fix the test --- src/cdk/testing/tests/webdriver.e2e.spec.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cdk/testing/tests/webdriver.e2e.spec.ts b/src/cdk/testing/tests/webdriver.e2e.spec.ts index 76f186f277a6..dc24dfef00ce 100644 --- a/src/cdk/testing/tests/webdriver.e2e.spec.ts +++ b/src/cdk/testing/tests/webdriver.e2e.spec.ts @@ -1,4 +1,3 @@ -import 'jasmine'; import {Builder, By, Capabilities, WebDriver} from 'selenium-webdriver'; /** @@ -37,6 +36,6 @@ describe('Webdriver test', () => { it('works', async () => { await wd.get('data:text/html,Test'); const body = await wd.findElement(By.css('body')); - expect(await body.getText()).toBe('Test test'); + expect(await body.getText()).toBe('Test'); }); });