diff --git a/src/cdk/testing/tests/BUILD.bazel b/src/cdk/testing/tests/BUILD.bazel index 73084408e73e..6c34924c0ade 100644 --- a/src/cdk/testing/tests/BUILD.bazel +++ b/src/cdk/testing/tests/BUILD.bazel @@ -1,4 +1,5 @@ -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") +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", @@ -77,3 +81,37 @@ ng_e2e_test_library( "//src/cdk/testing/protractor", ], ) + +ts_library( + name = "webdriver_test_lib", + testonly = 1, + srcs = ["webdriver.e2e.spec.ts"], + deps = [ + "@npm//@types/jasmine", + "@npm//@types/node", + "@npm//@types/selenium-webdriver", + ], +) + +jasmine_node_test( + 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", + 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", +) 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..dc24dfef00ce --- /dev/null +++ b/src/cdk/testing/tests/webdriver.e2e.spec.ts @@ -0,0 +1,41 @@ +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('Webdriver test', () => { + let wd: WebDriver; + + beforeAll(async () => { + wd = await new Builder() + .usingServer(process.env.WEB_TEST_WEBDRIVER_SERVER!) + .withCapabilities(webTestMetadata.capabilities) + .build(); + }); + + afterAll(async () => { + await wd.quit(); + }); + + it('works', async () => { + await wd.get('data:text/html,Test'); + const body = await wd.findElement(By.css('body')); + expect(await body.getText()).toBe('Test'); + }); +});