mirror of
https://github.com/microsoft/playwright.git
synced 2024-10-06 09:27:31 +03:00
chore: organize per-browser dependencies (#5787)
This commit is contained in:
parent
a185da9d14
commit
c4578f19f2
18
.github/workflows/tests.yml
vendored
18
.github/workflows/tests.yml
vendored
@ -29,9 +29,9 @@ jobs:
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 10
|
||||
- uses: microsoft/playwright-github-action@v1
|
||||
- run: npm ci
|
||||
- run: npm run build
|
||||
- run: node lib/cli/cli install-deps ${{ matrix.browser }} chromium
|
||||
- run: mkdir -p coredumps
|
||||
# Set core dump file name pattern
|
||||
- run: sudo bash -c 'echo "$(pwd -P)/coredumps/core-pid_%p.dump" > /proc/sys/kernel/core_pattern'
|
||||
@ -64,9 +64,9 @@ jobs:
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 10
|
||||
- uses: microsoft/playwright-github-action@v1
|
||||
- run: npm ci
|
||||
- run: npm run build
|
||||
- run: node lib/cli/cli install-deps ${{ matrix.browser }} chromium
|
||||
- run: npx folio test/ --workers=1 --forbid-only --global-timeout=5400000 --retries=3 --reporter=dot,json --shard=${{ matrix.shard }}/2
|
||||
env:
|
||||
BROWSER: ${{ matrix.browser }}
|
||||
@ -94,9 +94,9 @@ jobs:
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 10
|
||||
- uses: microsoft/playwright-github-action@v1
|
||||
- run: npm ci
|
||||
- run: npm run build
|
||||
- run: node lib/cli/cli install-deps
|
||||
- run: npx folio test/ --workers=1 --forbid-only --global-timeout=5400000 --retries=3 --reporter=dot,json
|
||||
shell: bash
|
||||
env:
|
||||
@ -125,9 +125,9 @@ jobs:
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node_version }}
|
||||
- uses: microsoft/playwright-github-action@v1
|
||||
- run: npm ci
|
||||
- run: npm run build
|
||||
- run: node lib/cli/cli install-deps
|
||||
- run: bash packages/installation-tests/installation-tests.sh
|
||||
|
||||
headful_linux:
|
||||
@ -142,9 +142,9 @@ jobs:
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 10
|
||||
- uses: microsoft/playwright-github-action@v1
|
||||
- run: npm ci
|
||||
- run: npm run build
|
||||
- run: node lib/cli/cli install-deps ${{ matrix.browser }} chromium
|
||||
- run: mkdir -p coredumps
|
||||
# Set core dump file name pattern
|
||||
- run: sudo bash -c 'echo "$(pwd -P)/coredumps/core-pid_%p.dump" > /proc/sys/kernel/core_pattern'
|
||||
@ -177,9 +177,9 @@ jobs:
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 10
|
||||
- uses: microsoft/playwright-github-action@v1
|
||||
- run: npm ci
|
||||
- run: npm run build
|
||||
- run: node lib/cli/cli install-deps chromium
|
||||
- run: mkdir -p coredumps
|
||||
# Set core dump file name pattern
|
||||
- run: sudo bash -c 'echo "$(pwd -P)/coredumps/core-pid_%p.dump" > /proc/sys/kernel/core_pattern'
|
||||
@ -211,9 +211,9 @@ jobs:
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 10
|
||||
- uses: microsoft/playwright-github-action@v1
|
||||
- run: npm ci
|
||||
- run: npm run build
|
||||
- run: node lib/cli/cli install-deps ${{ matrix.browser }} chromium
|
||||
- run: mkdir -p coredumps
|
||||
# Set core dump file name pattern
|
||||
- run: sudo bash -c 'echo "$(pwd -P)/coredumps/core-pid_%p.dump" > /proc/sys/kernel/core_pattern'
|
||||
@ -240,9 +240,9 @@ jobs:
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 14
|
||||
- uses: microsoft/playwright-github-action@v1
|
||||
- run: npm ci
|
||||
- run: npm run build
|
||||
- run: node lib/cli/cli install-deps
|
||||
- name: Create Android Emulator
|
||||
run: utils/avd_recreate.sh
|
||||
- name: Start Android Emulator
|
||||
@ -269,11 +269,11 @@ jobs:
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 10
|
||||
- uses: microsoft/playwright-github-action@v1
|
||||
- name: Install Chrome Stable
|
||||
run: sudo apt install google-chrome-stable
|
||||
- run: npm ci
|
||||
- run: npm run build
|
||||
- run: node lib/cli/cli install-deps chromium
|
||||
- run: mkdir -p coredumps
|
||||
# Set core dump file name pattern
|
||||
- run: sudo bash -c 'echo "$(pwd -P)/coredumps/core-pid_%p.dump" > /proc/sys/kernel/core_pattern'
|
||||
|
@ -31,6 +31,7 @@ import { Page } from '../client/page';
|
||||
import { BrowserType } from '../client/browserType';
|
||||
import { BrowserContextOptions, LaunchOptions } from '../client/types';
|
||||
import { spawn } from 'child_process';
|
||||
import { installDeps } from '../install/installDeps';
|
||||
|
||||
program
|
||||
.version('Version ' + require('../../package.json').version)
|
||||
@ -82,20 +83,34 @@ program
|
||||
program
|
||||
.command('install [browserType...]')
|
||||
.description('ensure browsers necessary for this version of Playwright are installed')
|
||||
.action(function(browserType) {
|
||||
const allBrowsers = new Set(['chromium', 'firefox', 'webkit']);
|
||||
for (const type of browserType) {
|
||||
if (!allBrowsers.has(type)) {
|
||||
console.log(`Invalid browser name: '${type}'. Expecting 'chromium', 'firefox' or 'webkit'.`);
|
||||
process.exit(1);
|
||||
.action(async function(browserType) {
|
||||
try {
|
||||
const allBrowsers = new Set(['chromium', 'firefox', 'webkit']);
|
||||
for (const type of browserType) {
|
||||
if (!allBrowsers.has(type)) {
|
||||
console.log(`Invalid browser name: '${type}'. Expecting 'chromium', 'firefox' or 'webkit'.`);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (browserType.length && browserType.includes('chromium'))
|
||||
browserType = browserType.concat('ffmpeg');
|
||||
installBrowsers(browserType.length ? browserType : undefined).catch((e: any) => {
|
||||
if (browserType.length && browserType.includes('chromium'))
|
||||
browserType = browserType.concat('ffmpeg');
|
||||
await installBrowsers(browserType.length ? browserType : undefined);
|
||||
} catch (e) {
|
||||
console.log(`Failed to install browsers\n${e}`);
|
||||
process.exit(1);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
program
|
||||
.command('install-deps [browserType...]')
|
||||
.description('install dependencies necessary to run browser')
|
||||
.action(async function(browserType) {
|
||||
try {
|
||||
await installDeps(browserType);
|
||||
} catch (e) {
|
||||
console.log(`Failed to install browsers\n${e}`);
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
|
||||
const browsers = [
|
||||
|
52
src/install/installDeps.ts
Normal file
52
src/install/installDeps.ts
Normal file
@ -0,0 +1,52 @@
|
||||
/**
|
||||
* Copyright (c) Microsoft Corporation.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import childProcess from 'child_process';
|
||||
import os from 'os';
|
||||
import { getUbuntuVersion } from '../utils/ubuntuVersion';
|
||||
|
||||
const { deps } = require('../nativeDeps');
|
||||
|
||||
export async function installDeps(browserTypes: string[]) {
|
||||
if (os.platform() !== 'linux')
|
||||
return;
|
||||
if (!browserTypes.length)
|
||||
browserTypes = ['chromium', 'firefox', 'webkit'];
|
||||
browserTypes.push('tools');
|
||||
|
||||
const ubuntuVersion = await getUbuntuVersion();
|
||||
if (ubuntuVersion !== '18.04' && ubuntuVersion !== '20.04') {
|
||||
console.warn('Cannot install dependencies for this linux distribution!'); // eslint-disable-line no-console
|
||||
return;
|
||||
}
|
||||
|
||||
const libraries: string[] = [];
|
||||
for (const browserType of browserTypes) {
|
||||
if (ubuntuVersion === '18.04')
|
||||
libraries.push(...deps['bionic'][browserType]);
|
||||
else if (ubuntuVersion === '20.04')
|
||||
libraries.push(...deps['focal'][browserType]);
|
||||
}
|
||||
const uniqueLibraries = Array.from(new Set(libraries));
|
||||
console.log('Installing Ubuntu dependencies...'); // eslint-disable-line no-console
|
||||
const commands: string[] = [];
|
||||
commands.push('apt-get update');
|
||||
commands.push(['apt-get', 'install', '-y', '--no-install-recommends',
|
||||
...uniqueLibraries,
|
||||
].join(' '));
|
||||
const child = childProcess.spawn('sudo', ['--', 'sh', '-c', `${commands.join('; ')}`], { stdio: 'inherit' });
|
||||
await new Promise(f => child.on('exit', f));
|
||||
}
|
231
src/nativeDeps.ts
Normal file
231
src/nativeDeps.ts
Normal file
@ -0,0 +1,231 @@
|
||||
/**
|
||||
* Copyright (c) Microsoft Corporation.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the 'License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// This file is used to:
|
||||
// - Generate Dockerfile.* files
|
||||
// - Build GitHubAction
|
||||
// - Execute 'npx playwright install-deps'
|
||||
|
||||
export const deps = {
|
||||
bionic: {
|
||||
tools: [
|
||||
'xvfb',
|
||||
],
|
||||
chromium: [
|
||||
'fonts-liberation',
|
||||
'libasound2',
|
||||
'libatk-bridge2.0-0',
|
||||
'libatk1.0-0',
|
||||
'libatspi2.0-0',
|
||||
'libcairo2',
|
||||
'libcups2',
|
||||
'libdbus-1-3',
|
||||
'libdrm2',
|
||||
'libgbm1',
|
||||
'libglib2.0-0',
|
||||
'libgtk-3-0',
|
||||
'libnspr4',
|
||||
'libnss3',
|
||||
'libpango-1.0-0',
|
||||
'libx11-6',
|
||||
'libxcb1',
|
||||
'libxcomposite1',
|
||||
'libxdamage1',
|
||||
'libxext6',
|
||||
'libxfixes3',
|
||||
'libxrandr2',
|
||||
],
|
||||
firefox: [
|
||||
'ffmpeg',
|
||||
'libatk1.0-0',
|
||||
'libcairo-gobject2',
|
||||
'libcairo2',
|
||||
'libdbus-1-3',
|
||||
'libdbus-glib-1-2',
|
||||
'libfontconfig1',
|
||||
'libfreetype6',
|
||||
'libgdk-pixbuf2.0-0',
|
||||
'libglib2.0-0',
|
||||
'libgtk-3-0',
|
||||
'libpango-1.0-0',
|
||||
'libpangocairo-1.0-0',
|
||||
'libpangoft2-1.0-0',
|
||||
'libx11-6',
|
||||
'libx11-xcb1',
|
||||
'libxcb-shm0',
|
||||
'libxcb1',
|
||||
'libxcomposite1',
|
||||
'libxcursor1',
|
||||
'libxdamage1',
|
||||
'libxext6',
|
||||
'libxfixes3',
|
||||
'libxi6',
|
||||
'libxrender1',
|
||||
'libxt6',
|
||||
],
|
||||
webkit: [
|
||||
'gstreamer1.0-libav',
|
||||
'gstreamer1.0-plugins-bad',
|
||||
'gstreamer1.0-plugins-base',
|
||||
'gstreamer1.0-plugins-good',
|
||||
'libatk-bridge2.0-0',
|
||||
'libatk1.0-0',
|
||||
'libbrotli1',
|
||||
'libcairo2',
|
||||
'libegl1',
|
||||
'libenchant1c2a',
|
||||
'libepoxy0',
|
||||
'libfontconfig1',
|
||||
'libfreetype6',
|
||||
'libgdk-pixbuf2.0-0',
|
||||
'libgl1',
|
||||
'libgles2',
|
||||
'libglib2.0-0',
|
||||
'libgstreamer-gl1.0-0',
|
||||
'libgstreamer1.0-0',
|
||||
'libgtk-3-0',
|
||||
'libharfbuzz-icu0',
|
||||
'libharfbuzz0b',
|
||||
'libhyphen0',
|
||||
'libicu60',
|
||||
'libjpeg-turbo8',
|
||||
'libnotify4',
|
||||
'libopenjp2-7',
|
||||
'libopus0',
|
||||
'libpango-1.0-0',
|
||||
'libpng16-16',
|
||||
'libsecret-1-0',
|
||||
'libvpx5',
|
||||
'libwayland-client0',
|
||||
'libwayland-egl1',
|
||||
'libwayland-server0',
|
||||
'libwebp6',
|
||||
'libwebpdemux2',
|
||||
'libwoff1',
|
||||
'libx11-6',
|
||||
'libxcomposite1',
|
||||
'libxdamage1',
|
||||
'libxkbcommon0',
|
||||
'libxml2',
|
||||
'libxslt1.1',
|
||||
],
|
||||
},
|
||||
|
||||
focal: {
|
||||
tools: [
|
||||
'xvfb',
|
||||
],
|
||||
chromium: [
|
||||
'fonts-liberation',
|
||||
'libasound2',
|
||||
'libatk-bridge2.0-0',
|
||||
'libatk1.0-0',
|
||||
'libatspi2.0-0',
|
||||
'libcairo2',
|
||||
'libcups2',
|
||||
'libdbus-1-3',
|
||||
'libdrm2',
|
||||
'libgbm1',
|
||||
'libglib2.0-0',
|
||||
'libgtk-3-0',
|
||||
'libnspr4',
|
||||
'libnss3',
|
||||
'libpango-1.0-0',
|
||||
'libx11-6',
|
||||
'libxcb1',
|
||||
'libxcomposite1',
|
||||
'libxdamage1',
|
||||
'libxext6',
|
||||
'libxfixes3',
|
||||
'libxrandr2',
|
||||
],
|
||||
firefox: [
|
||||
'ffmpeg',
|
||||
'libatk1.0-0',
|
||||
'libcairo-gobject2',
|
||||
'libcairo2',
|
||||
'libdbus-1-3',
|
||||
'libdbus-glib-1-2',
|
||||
'libfontconfig1',
|
||||
'libfreetype6',
|
||||
'libgdk-pixbuf2.0-0',
|
||||
'libglib2.0-0',
|
||||
'libgtk-3-0',
|
||||
'libpango-1.0-0',
|
||||
'libpangocairo-1.0-0',
|
||||
'libpangoft2-1.0-0',
|
||||
'libx11-6',
|
||||
'libx11-xcb1',
|
||||
'libxcb-shm0',
|
||||
'libxcb1',
|
||||
'libxcomposite1',
|
||||
'libxcursor1',
|
||||
'libxdamage1',
|
||||
'libxext6',
|
||||
'libxfixes3',
|
||||
'libxi6',
|
||||
'libxrender1',
|
||||
'libxt6',
|
||||
],
|
||||
webkit: [
|
||||
'gstreamer1.0-libav',
|
||||
'gstreamer1.0-plugins-bad',
|
||||
'gstreamer1.0-plugins-base',
|
||||
'gstreamer1.0-plugins-good',
|
||||
'libatk-bridge2.0-0',
|
||||
'libatk1.0-0',
|
||||
'libcairo2',
|
||||
'libegl1',
|
||||
'libenchant1c2a',
|
||||
'libepoxy0',
|
||||
'libfontconfig1',
|
||||
'libfreetype6',
|
||||
'libgdk-pixbuf2.0-0',
|
||||
'libgl1',
|
||||
'libgles2',
|
||||
'libglib2.0-0',
|
||||
'libgstreamer-gl1.0-0',
|
||||
'libgstreamer1.0-0',
|
||||
'libgtk-3-0',
|
||||
'libharfbuzz-icu0',
|
||||
'libharfbuzz0b',
|
||||
'libhyphen0',
|
||||
'libicu66',
|
||||
'libjpeg-turbo8',
|
||||
'libnotify4',
|
||||
'libopenjp2-7',
|
||||
'libopus0',
|
||||
'libpango-1.0-0',
|
||||
'libpng16-16',
|
||||
'libsecret-1-0',
|
||||
'libsoup2.4-1',
|
||||
'libvpx6',
|
||||
'libwayland-client0',
|
||||
'libwayland-egl1',
|
||||
'libwayland-server0',
|
||||
'libwebp6',
|
||||
'libwebpdemux2',
|
||||
'libwoff1',
|
||||
'libx11-6',
|
||||
'libxcomposite1',
|
||||
'libxdamage1',
|
||||
'libxkbcommon0',
|
||||
'libxml2',
|
||||
'libxslt1.1',
|
||||
],
|
||||
},
|
||||
};
|
||||
|
@ -302,16 +302,16 @@ const LIBRARY_TO_PACKAGE_NAME_UBUNTU_18_04: { [s: string]: string} = {
|
||||
'libglib-2.0.so.0': 'libglib2.0-0',
|
||||
'libgmodule-2.0.so.0': 'libglib2.0-0',
|
||||
'libgobject-2.0.so.0': 'libglib2.0-0',
|
||||
'libgstapp-1.0.so.0': 'libgstreamer-plugins-base1.0-0',
|
||||
'libgstaudio-1.0.so.0': 'libgstreamer-plugins-base1.0-0',
|
||||
'libgstapp-1.0.so.0': 'gstreamer1.0-plugins-base',
|
||||
'libgstaudio-1.0.so.0': 'gstreamer1.0-plugins-base',
|
||||
'libgstbase-1.0.so.0': 'libgstreamer1.0-0',
|
||||
'libgstcodecparsers-1.0.so.0': 'libgstreamer-plugins-bad1.0-0',
|
||||
'libgstfft-1.0.so.0': 'libgstreamer-plugins-base1.0-0',
|
||||
'libgstcodecparsers-1.0.so.0': 'gstreamer1.0-plugins-bad',
|
||||
'libgstfft-1.0.so.0': 'gstreamer1.0-plugins-base',
|
||||
'libgstgl-1.0.so.0': 'libgstreamer-gl1.0-0',
|
||||
'libgstpbutils-1.0.so.0': 'libgstreamer-plugins-base1.0-0',
|
||||
'libgstpbutils-1.0.so.0': 'gstreamer1.0-plugins-base',
|
||||
'libgstreamer-1.0.so.0': 'libgstreamer1.0-0',
|
||||
'libgsttag-1.0.so.0': 'libgstreamer-plugins-base1.0-0',
|
||||
'libgstvideo-1.0.so.0': 'libgstreamer-plugins-base1.0-0',
|
||||
'libgsttag-1.0.so.0': 'gstreamer1.0-plugins-base',
|
||||
'libgstvideo-1.0.so.0': 'gstreamer1.0-plugins-base',
|
||||
'libgthread-2.0.so.0': 'libglib2.0-0',
|
||||
'libgtk-3.so.0': 'libgtk-3-0',
|
||||
'libgtk-x11-2.0.so.0': 'libgtk2.0-0',
|
||||
@ -389,16 +389,16 @@ const LIBRARY_TO_PACKAGE_NAME_UBUNTU_20_04: { [s: string]: string} = {
|
||||
'libglib-2.0.so.0': 'libglib2.0-0',
|
||||
'libgmodule-2.0.so.0': 'libglib2.0-0',
|
||||
'libgobject-2.0.so.0': 'libglib2.0-0',
|
||||
'libgstapp-1.0.so.0': 'libgstreamer-plugins-base1.0-0',
|
||||
'libgstaudio-1.0.so.0': 'libgstreamer-plugins-base1.0-0',
|
||||
'libgstapp-1.0.so.0': 'gstreamer1.0-plugins-base',
|
||||
'libgstaudio-1.0.so.0': 'gstreamer1.0-plugins-base',
|
||||
'libgstbase-1.0.so.0': 'libgstreamer1.0-0',
|
||||
'libgstcodecparsers-1.0.so.0': 'libgstreamer-plugins-bad1.0-0',
|
||||
'libgstfft-1.0.so.0': 'libgstreamer-plugins-base1.0-0',
|
||||
'libgstcodecparsers-1.0.so.0': 'gstreamer1.0-plugins-bad',
|
||||
'libgstfft-1.0.so.0': 'gstreamer1.0-plugins-base',
|
||||
'libgstgl-1.0.so.0': 'libgstreamer-gl1.0-0',
|
||||
'libgstpbutils-1.0.so.0': 'libgstreamer-plugins-base1.0-0',
|
||||
'libgstpbutils-1.0.so.0': 'gstreamer1.0-plugins-base',
|
||||
'libgstreamer-1.0.so.0': 'libgstreamer1.0-0',
|
||||
'libgsttag-1.0.so.0': 'libgstreamer-plugins-base1.0-0',
|
||||
'libgstvideo-1.0.so.0': 'libgstreamer-plugins-base1.0-0',
|
||||
'libgsttag-1.0.so.0': 'gstreamer1.0-plugins-base',
|
||||
'libgstvideo-1.0.so.0': 'gstreamer1.0-plugins-base',
|
||||
'libgthread-2.0.so.0': 'libglib2.0-0',
|
||||
'libgtk-3.so.0': 'libgtk-3-0',
|
||||
'libgtk-x11-2.0.so.0': 'libgtk2.0-0',
|
||||
|
@ -76,7 +76,9 @@ var context = await browser.NewContextAsync(
|
||||
expect(cli.text()).toContain(expectedResult);
|
||||
});
|
||||
|
||||
it('should print the correct context options when using a device', async ({ runCLI }) => {
|
||||
it('should print the correct context options when using a device', (test, { browserName }) => {
|
||||
test.skip(browserName !== 'chromium');
|
||||
}, async ({ runCLI }) => {
|
||||
const cli = runCLI(['codegen', '--device=Pixel 2', '--target=csharp', emptyHTML]);
|
||||
const expectedResult = `await Playwright.InstallAsync();
|
||||
using var playwright = await Playwright.CreateAsync();
|
||||
@ -86,7 +88,9 @@ var context = await browser.NewContextAsync(playwright.Devices["Pixel 2"]);`;
|
||||
expect(cli.text()).toContain(expectedResult);
|
||||
});
|
||||
|
||||
it('should print the correct context options when using a device and additional options', async ({ runCLI }) => {
|
||||
it('should print the correct context options when using a device and additional options', (test, {browserName}) => {
|
||||
test.skip(browserName !== 'webkit');
|
||||
}, async ({ runCLI }) => {
|
||||
const cli = runCLI([
|
||||
'codegen',
|
||||
'--device=iPhone 11',
|
||||
|
@ -45,7 +45,9 @@ it('should print the correct context options for custom settings', async ({ runC
|
||||
expect(cli.text()).toContain(expectedResult);
|
||||
});
|
||||
|
||||
it('should print the correct context options when using a device', async ({ runCLI }) => {
|
||||
it('should print the correct context options when using a device', (test, { browserName }) => {
|
||||
test.skip(browserName !== 'chromium');
|
||||
}, async ({ runCLI }) => {
|
||||
const cli = runCLI(['codegen', '--device=Pixel 2', '--target=java', emptyHTML]);
|
||||
const expectedResult = `BrowserContext context = browser.newContext(new Browser.NewContextOptions()
|
||||
.setUserAgent("Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36")
|
||||
@ -57,7 +59,9 @@ it('should print the correct context options when using a device', async ({ runC
|
||||
expect(cli.text()).toContain(expectedResult);
|
||||
});
|
||||
|
||||
it('should print the correct context options when using a device and additional options', async ({ runCLI }) => {
|
||||
it('should print the correct context options when using a device and additional options', (test, { browserName }) => {
|
||||
test.skip(browserName !== 'webkit');
|
||||
}, async ({ runCLI }) => {
|
||||
const cli = runCLI(['codegen', '--color-scheme=light', '--device=iPhone 11', '--target=java', emptyHTML]);
|
||||
const expectedResult = `BrowserContext context = browser.newContext(new Browser.NewContextOptions()
|
||||
.setColorScheme(ColorScheme.LIGHT)
|
||||
|
@ -51,7 +51,9 @@ it('should print the correct context options for custom settings', async ({ brow
|
||||
});
|
||||
|
||||
|
||||
it('should print the correct context options when using a device', async ({ runCLI }) => {
|
||||
it('should print the correct context options when using a device', (test, { browserName }) => {
|
||||
test.skip(browserName !== 'chromium');
|
||||
}, async ({ runCLI }) => {
|
||||
const cli = runCLI(['codegen', '--device=Pixel 2', emptyHTML]);
|
||||
const expectedResult = `const { chromium, devices } = require('playwright');
|
||||
|
||||
@ -66,7 +68,9 @@ it('should print the correct context options when using a device', async ({ runC
|
||||
expect(cli.text()).toContain(expectedResult);
|
||||
});
|
||||
|
||||
it('should print the correct context options when using a device and additional options', async ({ runCLI }) => {
|
||||
it('should print the correct context options when using a device and additional options', (test, { browserName }) => {
|
||||
test.skip(browserName !== 'webkit');
|
||||
}, async ({ runCLI }) => {
|
||||
const cli = runCLI(['codegen', '--color-scheme=light', '--device=iPhone 11', emptyHTML]);
|
||||
const expectedResult = `const { webkit, devices } = require('playwright');
|
||||
|
||||
|
@ -46,7 +46,9 @@ async def run(playwright):
|
||||
expect(cli.text()).toContain(expectedResult);
|
||||
});
|
||||
|
||||
it('should print the correct context options when using a device', async ({ runCLI }) => {
|
||||
it('should print the correct context options when using a device', (test, { browserName }) => {
|
||||
test.skip(browserName !== 'chromium');
|
||||
}, async ({ runCLI }) => {
|
||||
const cli = runCLI(['codegen', '--device=Pixel 2', '--target=python-async', emptyHTML]);
|
||||
const expectedResult = `import asyncio
|
||||
from playwright.async_api import async_playwright
|
||||
@ -58,7 +60,9 @@ async def run(playwright):
|
||||
expect(cli.text()).toContain(expectedResult);
|
||||
});
|
||||
|
||||
it('should print the correct context options when using a device and additional options', async ({ runCLI }) => {
|
||||
it('should print the correct context options when using a device and additional options', (test, { browserName }) => {
|
||||
test.skip(browserName !== 'webkit');
|
||||
}, async ({ runCLI }) => {
|
||||
const cli = runCLI(['codegen', '--color-scheme=light', '--device=iPhone 11', '--target=python-async', emptyHTML]);
|
||||
const expectedResult = `import asyncio
|
||||
from playwright.async_api import async_playwright
|
||||
|
@ -44,7 +44,9 @@ def run(playwright):
|
||||
expect(cli.text()).toContain(expectedResult);
|
||||
});
|
||||
|
||||
it('should print the correct context options when using a device', async ({ runCLI }) => {
|
||||
it('should print the correct context options when using a device', (test, { browserName }) => {
|
||||
test.skip(browserName !== 'chromium');
|
||||
}, async ({ runCLI }) => {
|
||||
const cli = runCLI(['codegen', '--device=Pixel 2', '--target=python', emptyHTML]);
|
||||
const expectedResult = `from playwright.sync_api import sync_playwright
|
||||
|
||||
@ -55,7 +57,9 @@ def run(playwright):
|
||||
expect(cli.text()).toContain(expectedResult);
|
||||
});
|
||||
|
||||
it('should print the correct context options when using a device and additional options', async ({ runCLI }) => {
|
||||
it('should print the correct context options when using a device and additional options', (test, { browserName }) => {
|
||||
test.skip(browserName !== 'webkit');
|
||||
}, async ({ runCLI }) => {
|
||||
const cli = runCLI(['codegen', '--color-scheme=light', '--device=iPhone 11', '--target=python', emptyHTML]);
|
||||
const expectedResult = `from playwright.sync_api import sync_playwright
|
||||
|
||||
|
@ -1,60 +1,116 @@
|
||||
FROM ubuntu:bionic
|
||||
|
||||
# === INSTALL BROWSER DEPENDENCIES ===
|
||||
# === GENERATED BROWSER DEPENDENCIES ===
|
||||
|
||||
# Install WebKit dependencies
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
libwoff1 \
|
||||
libopus0 \
|
||||
libwebp6 \
|
||||
libwebpdemux2 \
|
||||
libenchant1c2a \
|
||||
libgudev-1.0-0 \
|
||||
libsecret-1-0 \
|
||||
libhyphen0 \
|
||||
libgdk-pixbuf2.0-0 \
|
||||
libegl1 \
|
||||
libnotify4 \
|
||||
libxslt1.1 \
|
||||
libevent-2.1-6 \
|
||||
libgles2 \
|
||||
libvpx5 \
|
||||
libxcomposite1 \
|
||||
libatk1.0-0 \
|
||||
libatk-bridge2.0-0 \
|
||||
libepoxy0 \
|
||||
libgtk-3-0 \
|
||||
libharfbuzz-icu0
|
||||
# (generated with ./updateDockerDeps.js)
|
||||
|
||||
# Install gstreamer and plugins to support video playback in WebKit.
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
libgstreamer-gl1.0-0 \
|
||||
libgstreamer-plugins-bad1.0-0 \
|
||||
gstreamer1.0-plugins-good \
|
||||
gstreamer1.0-libav
|
||||
|
||||
# Install Chromium dependencies
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
fonts-liberation \
|
||||
libnss3 \
|
||||
libxss1 \
|
||||
libasound2 \
|
||||
fonts-noto-color-emoji \
|
||||
libxtst6
|
||||
|
||||
# Install Firefox dependencies
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
libdbus-glib-1-2 \
|
||||
libxt6
|
||||
|
||||
# Install ffmpeg to bring in audio and video codecs necessary for playing videos in Firefox.
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ffmpeg
|
||||
|
||||
# (Optional) Install XVFB if there's a need to run browsers in headful mode
|
||||
# tools
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
xvfb
|
||||
|
||||
# chromium
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
fonts-liberation\
|
||||
libasound2\
|
||||
libatk-bridge2.0-0\
|
||||
libatk1.0-0\
|
||||
libatspi2.0-0\
|
||||
libcairo2\
|
||||
libcups2\
|
||||
libdbus-1-3\
|
||||
libdrm2\
|
||||
libgbm1\
|
||||
libglib2.0-0\
|
||||
libgtk-3-0\
|
||||
libnspr4\
|
||||
libnss3\
|
||||
libpango-1.0-0\
|
||||
libx11-6\
|
||||
libxcb1\
|
||||
libxcomposite1\
|
||||
libxdamage1\
|
||||
libxext6\
|
||||
libxfixes3\
|
||||
libxrandr2
|
||||
|
||||
# firefox
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ffmpeg\
|
||||
libatk1.0-0\
|
||||
libcairo-gobject2\
|
||||
libcairo2\
|
||||
libdbus-1-3\
|
||||
libdbus-glib-1-2\
|
||||
libfontconfig1\
|
||||
libfreetype6\
|
||||
libgdk-pixbuf2.0-0\
|
||||
libglib2.0-0\
|
||||
libgtk-3-0\
|
||||
libpango-1.0-0\
|
||||
libpangocairo-1.0-0\
|
||||
libpangoft2-1.0-0\
|
||||
libx11-6\
|
||||
libx11-xcb1\
|
||||
libxcb-shm0\
|
||||
libxcb1\
|
||||
libxcomposite1\
|
||||
libxcursor1\
|
||||
libxdamage1\
|
||||
libxext6\
|
||||
libxfixes3\
|
||||
libxi6\
|
||||
libxrender1\
|
||||
libxt6
|
||||
|
||||
# webkit
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
gstreamer1.0-libav\
|
||||
gstreamer1.0-plugins-bad\
|
||||
gstreamer1.0-plugins-base\
|
||||
gstreamer1.0-plugins-good\
|
||||
libatk-bridge2.0-0\
|
||||
libatk1.0-0\
|
||||
libbrotli1\
|
||||
libcairo2\
|
||||
libegl1\
|
||||
libenchant1c2a\
|
||||
libepoxy0\
|
||||
libfontconfig1\
|
||||
libfreetype6\
|
||||
libgdk-pixbuf2.0-0\
|
||||
libgl1\
|
||||
libgles2\
|
||||
libglib2.0-0\
|
||||
libgstreamer-gl1.0-0\
|
||||
libgstreamer1.0-0\
|
||||
libgtk-3-0\
|
||||
libharfbuzz-icu0\
|
||||
libharfbuzz0b\
|
||||
libhyphen0\
|
||||
libicu60\
|
||||
libjpeg-turbo8\
|
||||
libnotify4\
|
||||
libopenjp2-7\
|
||||
libopus0\
|
||||
libpango-1.0-0\
|
||||
libpng16-16\
|
||||
libsecret-1-0\
|
||||
libvpx5\
|
||||
libwayland-client0\
|
||||
libwayland-egl1\
|
||||
libwayland-server0\
|
||||
libwebp6\
|
||||
libwebpdemux2\
|
||||
libwoff1\
|
||||
libx11-6\
|
||||
libxcomposite1\
|
||||
libxdamage1\
|
||||
libxkbcommon0\
|
||||
libxml2\
|
||||
libxslt1.1
|
||||
|
||||
# === GENERATED BROWSER DEPENDENCIES END ===
|
||||
|
||||
# === INSTALL Node.js ===
|
||||
|
||||
# Install node14
|
||||
|
@ -1,59 +1,116 @@
|
||||
FROM ubuntu:focal
|
||||
|
||||
# === INSTALL BROWSER DEPENDENCIES ===
|
||||
# === GENERATED BROWSER DEPENDENCIES ===
|
||||
|
||||
# Install WebKit dependencies
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
libwoff1 \
|
||||
libopus0 \
|
||||
libwebp6 \
|
||||
libwebpdemux2 \
|
||||
libenchant1c2a \
|
||||
libgudev-1.0-0 \
|
||||
libsecret-1-0 \
|
||||
libhyphen0 \
|
||||
libgdk-pixbuf2.0-0 \
|
||||
libegl1 \
|
||||
libnotify4 \
|
||||
libxslt1.1 \
|
||||
libevent-2.1-7 \
|
||||
libgles2 \
|
||||
libxcomposite1 \
|
||||
libatk1.0-0 \
|
||||
libatk-bridge2.0-0 \
|
||||
libepoxy0 \
|
||||
libgtk-3-0 \
|
||||
libharfbuzz-icu0
|
||||
# (generated with ./updateDockerDeps.js)
|
||||
|
||||
# Install gstreamer and plugins to support video playback in WebKit.
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
libgstreamer-gl1.0-0 \
|
||||
libgstreamer-plugins-bad1.0-0 \
|
||||
gstreamer1.0-plugins-good \
|
||||
gstreamer1.0-libav
|
||||
|
||||
# Install Chromium dependencies
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
fonts-liberation \
|
||||
libnss3 \
|
||||
libxss1 \
|
||||
libasound2 \
|
||||
fonts-noto-color-emoji \
|
||||
libxtst6
|
||||
|
||||
# Install Firefox dependencies
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
libdbus-glib-1-2 \
|
||||
libxt6
|
||||
|
||||
# Install ffmpeg to bring in audio and video codecs necessary for playing videos in Firefox.
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ffmpeg
|
||||
|
||||
# (Optional) Install XVFB if there's a need to run browsers in headful mode
|
||||
# tools
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
xvfb
|
||||
|
||||
# chromium
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
fonts-liberation\
|
||||
libasound2\
|
||||
libatk-bridge2.0-0\
|
||||
libatk1.0-0\
|
||||
libatspi2.0-0\
|
||||
libcairo2\
|
||||
libcups2\
|
||||
libdbus-1-3\
|
||||
libdrm2\
|
||||
libgbm1\
|
||||
libglib2.0-0\
|
||||
libgtk-3-0\
|
||||
libnspr4\
|
||||
libnss3\
|
||||
libpango-1.0-0\
|
||||
libx11-6\
|
||||
libxcb1\
|
||||
libxcomposite1\
|
||||
libxdamage1\
|
||||
libxext6\
|
||||
libxfixes3\
|
||||
libxrandr2
|
||||
|
||||
# firefox
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ffmpeg\
|
||||
libatk1.0-0\
|
||||
libcairo-gobject2\
|
||||
libcairo2\
|
||||
libdbus-1-3\
|
||||
libdbus-glib-1-2\
|
||||
libfontconfig1\
|
||||
libfreetype6\
|
||||
libgdk-pixbuf2.0-0\
|
||||
libglib2.0-0\
|
||||
libgtk-3-0\
|
||||
libpango-1.0-0\
|
||||
libpangocairo-1.0-0\
|
||||
libpangoft2-1.0-0\
|
||||
libx11-6\
|
||||
libx11-xcb1\
|
||||
libxcb-shm0\
|
||||
libxcb1\
|
||||
libxcomposite1\
|
||||
libxcursor1\
|
||||
libxdamage1\
|
||||
libxext6\
|
||||
libxfixes3\
|
||||
libxi6\
|
||||
libxrender1\
|
||||
libxt6
|
||||
|
||||
# webkit
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
gstreamer1.0-libav\
|
||||
gstreamer1.0-plugins-bad\
|
||||
gstreamer1.0-plugins-base\
|
||||
gstreamer1.0-plugins-good\
|
||||
libatk-bridge2.0-0\
|
||||
libatk1.0-0\
|
||||
libcairo2\
|
||||
libegl1\
|
||||
libenchant1c2a\
|
||||
libepoxy0\
|
||||
libfontconfig1\
|
||||
libfreetype6\
|
||||
libgdk-pixbuf2.0-0\
|
||||
libgl1\
|
||||
libgles2\
|
||||
libglib2.0-0\
|
||||
libgstreamer-gl1.0-0\
|
||||
libgstreamer1.0-0\
|
||||
libgtk-3-0\
|
||||
libharfbuzz-icu0\
|
||||
libharfbuzz0b\
|
||||
libhyphen0\
|
||||
libicu66\
|
||||
libjpeg-turbo8\
|
||||
libnotify4\
|
||||
libopenjp2-7\
|
||||
libopus0\
|
||||
libpango-1.0-0\
|
||||
libpng16-16\
|
||||
libsecret-1-0\
|
||||
libsoup2.4-1\
|
||||
libvpx6\
|
||||
libwayland-client0\
|
||||
libwayland-egl1\
|
||||
libwayland-server0\
|
||||
libwebp6\
|
||||
libwebpdemux2\
|
||||
libwoff1\
|
||||
libx11-6\
|
||||
libxcomposite1\
|
||||
libxdamage1\
|
||||
libxkbcommon0\
|
||||
libxml2\
|
||||
libxslt1.1
|
||||
|
||||
# === GENERATED BROWSER DEPENDENCIES END ===
|
||||
|
||||
# === INSTALL Node.js ===
|
||||
|
||||
# Install node14
|
||||
|
37
utils/docker/updateDockerDeps.js
Normal file
37
utils/docker/updateDockerDeps.js
Normal file
@ -0,0 +1,37 @@
|
||||
/**
|
||||
* Copyright (c) Microsoft Corporation.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the 'License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
|
||||
const { deps } = require('../../lib/nativeDeps');
|
||||
for (const distro in deps) {
|
||||
const file = fs.readFileSync(require.resolve(`./Dockerfile.${distro}`), 'utf-8');
|
||||
const newContent = [];
|
||||
newContent.push('# === GENERATED BROWSER DEPENDENCIES ===');
|
||||
newContent.push('');
|
||||
newContent.push('# (generated with ./updateDockerDeps.js)');
|
||||
for (const browser in deps[distro]) {
|
||||
newContent.push('');
|
||||
newContent.push(`# ${browser}`);
|
||||
newContent.push(`RUN apt-get update && apt-get install -y --no-install-recommends \\`);
|
||||
newContent.push(' ' + deps[distro][browser].join('\\\n '));
|
||||
}
|
||||
newContent.push('');
|
||||
newContent.push('# === GENERATED BROWSER DEPENDENCIES END ===');
|
||||
const result = file.replace(/# === GENERATED BROWSER DEPENDENCIES ===[.\s\S]*# === GENERATED BROWSER DEPENDENCIES END ===/g, newContent.join('\n'));
|
||||
console.log(`Updating Dockerfile.${distro}`);
|
||||
fs.writeFileSync(require.resolve(`./Dockerfile.${distro}`), result);
|
||||
}
|
Loading…
Reference in New Issue
Block a user