From ce7c8d74b54688caddfda0710547366fabf3a5dc Mon Sep 17 00:00:00 2001 From: Andrey Lushnikov Date: Tue, 28 Jan 2020 18:09:07 -0800 Subject: [PATCH] feat: introduce BrowserType.name() (#732) This helps a lot to produce nice logging: ```js const { chromium, webkit } = require('playwright'); (async () => { for (const launcher of [chromium, webkit]) { console.log(`Testing on ${launcher.name()}`); const browser = await launcher.launch(); // ... await browser.close(); } })(); ``` --- docs/api.md | 6 ++++++ src/server/browserType.ts | 1 + src/server/chromium.ts | 4 ++++ src/server/firefox.ts | 4 ++++ src/server/webkit.ts | 4 ++++ test/launcher.spec.js | 13 +++++++++++++ 6 files changed, 32 insertions(+) diff --git a/docs/api.md b/docs/api.md index 2b5044381152b..e5828328bbe26 100644 --- a/docs/api.md +++ b/docs/api.md @@ -3402,6 +3402,7 @@ const { chromium } = require('playwright'); // Or 'firefox' or 'webkit'. - [browserType.executablePath()](#browsertypeexecutablepath) - [browserType.launch([options])](#browsertypelaunchoptions) - [browserType.launchBrowserApp([options])](#browsertypelaunchbrowserappoptions) +- [browserType.name()](#browsertypename) #### browserType.connect(options) @@ -3523,6 +3524,11 @@ const browser = await chromium.launch({ // Or 'firefox' or 'webkit'. - `devtools` <[boolean]> **Chromium-only** Whether to auto-open a Developer Tools panel for each tab. If this option is `true`, the `headless` option will be set `false`. - returns: <[Promise]<[BrowserApp]>> Promise which resolves to the browser app instance. +#### browserType.name() +- returns: <[string]> + +Returns browser name. For example: `'chromium'`, `'webkit'` or `'firefox'`. + ### class: ChromiumBrowser * extends: [Browser] diff --git a/src/server/browserType.ts b/src/server/browserType.ts index a12921db095b5..5a062c6b0617f 100644 --- a/src/server/browserType.ts +++ b/src/server/browserType.ts @@ -41,6 +41,7 @@ export type LaunchOptions = BrowserArgOptions & { export interface BrowserType { executablePath(): string; + name(): string; launchBrowserApp(options?: LaunchOptions): Promise; launch(options?: LaunchOptions): Promise; defaultArgs(options?: BrowserArgOptions): string[]; diff --git a/src/server/chromium.ts b/src/server/chromium.ts index 7f2ad85f227a7..89d638d6c018f 100644 --- a/src/server/chromium.ts +++ b/src/server/chromium.ts @@ -43,6 +43,10 @@ export class Chromium implements BrowserType { this._revision = preferredRevision; } + name() { + return 'chromium'; + } + async launch(options?: LaunchOptions): Promise { const app = await this.launchBrowserApp(options); const browser = await CRBrowser.connect(app.connectOptions()); diff --git a/src/server/firefox.ts b/src/server/firefox.ts index 2769b472b8918..81a07437d42e4 100644 --- a/src/server/firefox.ts +++ b/src/server/firefox.ts @@ -42,6 +42,10 @@ export class Firefox implements BrowserType { this._revision = preferredRevision; } + name() { + return 'firefox'; + } + async launch(options?: LaunchOptions): Promise { const app = await this.launchBrowserApp(options); const browser = await FFBrowser.connect(app.connectOptions()); diff --git a/src/server/webkit.ts b/src/server/webkit.ts index 23bb49f6208c7..f68f57012094c 100644 --- a/src/server/webkit.ts +++ b/src/server/webkit.ts @@ -47,6 +47,10 @@ export class WebKit implements BrowserType { this._revision = preferredRevision; } + name() { + return 'webkit'; + } + async launch(options?: LaunchOptions): Promise { const app = await this.launchBrowserApp(options); const browser = await WKBrowser.connect(app.connectOptions()); diff --git a/test/launcher.spec.js b/test/launcher.spec.js index 413be7f249c59..3f836851a3a91 100644 --- a/test/launcher.spec.js +++ b/test/launcher.spec.js @@ -81,6 +81,19 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p }); }); + describe('Playwright.name', function() { + it('should work', async({server}) => { + if (WEBKIT) + expect(playwright.name()).toBe('webkit'); + else if (FFOX) + expect(playwright.name()).toBe('firefox'); + else if (CHROMIUM) + expect(playwright.name()).toBe('chromium'); + else + throw new Error('Unknown browser'); + }); + }); + describe('Playwright.defaultArguments', () => { it('should return the default arguments', async() => { if (CHROMIUM)