microsoft / playwright

Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.
https://playwright.dev
Apache License 2.0
65.6k stars 3.57k forks source link

[BUG] Chromium fails to connect in CI most of the times #2748

Closed vrknetha closed 3 years ago

vrknetha commented 4 years ago

Context:

The chromium fails to connect in the CI, We have used all same dependencies mentioned in the playwright docker. I am attaching the logs. Initially, we thought it's due to memory and we have bumped up to 8gb but still, it's failing.

Code Snippet

RUN apt-get update && apt-get install -y curl && \
    curl -sL https://deb.nodesource.com/setup_12.x | bash - && \
    apt-get install -y nodejs

# 2. Install WebKit dependencies
RUN apt-get install -y 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

# 3. Install gstreamer and plugins to support video playback in WebKit.
RUN apt-get install -y gstreamer1.0-gl \
                       gstreamer1.0-plugins-base \
                       gstreamer1.0-plugins-good \
                       gstreamer1.0-plugins-bad

# 4. Install Chromium dependencies

RUN apt-get install -y libnss3 \
               libnss3-dev \
                       libxss1 \
                       libasound2 \
                       fonts-noto-color-emoji

# 5. Install Firefox dependencies

RUN apt-get install -y libdbus-glib-1-2 \
                       libxt6

# 6. Install ffmpeg to bring in audio and video codecs necessary for playing videos in Firefox.

RUN apt-get install -y ffmpeg

# 7. Add user so we don't need --no-sandbox in Chromium
RUN groupadd -r pwuser && useradd -r -g pwuser -G audio,video pwuser \
    && mkdir -p /home/pwuser/Downloads \
    && chown -R pwuser:pwuser /home/pwuser

# 8. (Optional) Install XVFB if there's a need to run browsers in the headful mode
RUN apt-get install -y xvfb

# 9. Install Git and its dependencies
RUN apt-get install -y git

RUN node -v
[1] 2020-06-29T06:29:14.214Z pw:api => chromium.connect started
[1] 2020-06-29T06:29:14.215Z pw:browser   <ws connecting> ws://127.0.0.1:40083/2c1646de5dcd1bec0b06517e237dc560
[1] 2020-06-29T06:29:14.218Z pw:browser:err Received signal 11 SEGV_MAPERR ffffed3bb7cb1135
[1] 2020-06-29T06:29:14.224Z pw:browser   <ws connected> ws://127.0.0.1:40083/2c1646de5dcd1bec0b06517e237dc560
[1] 2020-06-29T06:29:14.224Z pw:protocol SEND º {"id":1,"method":"Target.setAutoAttach","params":{"autoAttach":true,"waitForDebuggerOnStart":true,"flatten":true}}
[1] 2020-06-29T06:29:14.233Z pw:browser:err #0 0x558a9fba9a99 base::debug::CollectStackTrace()
[1] 2020-06-29T06:29:14.245Z pw:browser:err #1 0x558a9fb263b3 base::debug::StackTrace::StackTrace()
[1] 2020-06-29T06:29:14.262Z pw:browser:err #2 0x558a9fba9635 base::debug::(anonymous namespace)::StackDumpSignalHandler()
[1] 2020-06-29T06:29:14.263Z pw:browser:err #3 0x7f4431a97890 (/lib/x86_64-linux-gnu/libpthread-2.27.so+0x1288f)
[1] 2020-06-29T06:29:14.269Z pw:browser:err #4 0x558a9debe035 content::protocol::NetworkHandler::SetNetworkConditions()
[1] 2020-06-29T06:29:14.278Z pw:browser:err #5 0x558a9debdf83 content::protocol::NetworkHandler::Disable()
[1] 2020-06-29T06:29:14.282Z pw:browser:err #6 0x558a9de92746 content::DevToolsSession::Dispose()
[1] 2020-06-29T06:29:14.287Z pw:browser:err #7 0x558a9de7e4ce content::DevToolsAgentHostImpl::DetachInternal()
[1] 2020-06-29T06:29:14.293Z pw:browser:err #8 0x558a9de7e3c9 content::DevToolsAgentHostImpl::DetachClient()
[1] 2020-06-29T06:29:14.298Z pw:browser:err #9 0x558a9dee5e34 content::protocol::TargetHandler::Session::Detach()
[1] 2020-06-29T06:29:14.304Z pw:browser:err #10 0x558a9dedfcf6 content::protocol::TargetAutoAttacher::ReattachTargetsOfType()
[1] 2020-06-29T06:29:14.308Z pw:browser:err #11 0x558a9dee122f content::protocol::TargetAutoAttacher::SetAutoAttach()
[1] 2020-06-29T06:29:14.313Z pw:browser:err #12 0x558a9dee5494 content::protocol::TargetHandler::SetAutoAttachInternal()
[1] 2020-06-29T06:29:14.323Z pw:browser:err #13 0x558a9dee5223 content::protocol::TargetHandler::Disable()
[1] 2020-06-29T06:29:14.323Z pw:browser:err #14 0x558a9de92746 content::DevToolsSession::Dispose()
[1] 2020-06-29T06:29:14.329Z pw:browser:err #15 0x558a9de7e4ce content::DevToolsAgentHostImpl::DetachInternal()
[1] 2020-06-29T06:29:14.334Z pw:browser:err #16 0x558a9de7e3c9 content::DevToolsAgentHostImpl::DetachClient()
[1] 2020-06-29T06:29:14.340Z pw:browser:err #17 0x558a9dee5e34 content::protocol::TargetHandler::Session::Detach()
[1] 2020-06-29T06:29:14.347Z pw:browser:err #18 0x558a9dee6b5d content::protocol::TargetHandler::DetachFromTarget()
[1] 2020-06-29T06:29:14.352Z pw:browser:err #19 0x558a9dee6c22 content::protocol::TargetHandler::DetachFromTarget()
[1] 2020-06-29T06:29:14.356Z pw:browser:err #20 0x558a9dd3241d content::protocol::Target::DomainDispatcherImpl::detachFromTarget()
[1] 2020-06-29T06:29:14.360Z pw:browser:err #21 0x558a9dceaf48 std::__1::__function::__policy_invoker<>::__call_impl<>()
[1] 2020-06-29T06:29:14.371Z pw:browser:err #22 0x558a9ef650e3 v8_crdtp::UberDispatcher::DispatchResult::Run()
[1] 2020-06-29T06:29:14.376Z pw:browser:err #23 0x558a9de94302 content::DevToolsSession::HandleCommandInternal()
[1] 2020-06-29T06:29:14.382Z pw:browser:err #24 0x558a9de9426b content::DevToolsSession::HandleCommand()
[1] 2020-06-29T06:29:14.425Z pw:browser:err #25 0x558aa44341a7 headless::protocol::HeadlessDevToolsSession::HandleCommand()
[1] 2020-06-29T06:29:14.465Z pw:browser:err #26 0x558aa4433448 headless::HeadlessDevToolsManagerDelegate::HandleCommand()
[1] 2020-06-29T06:29:14.471Z pw:browser:err #27 0x558a9de9418e content::DevToolsSession::DispatchProtocolMessageInternal()
[1] 2020-06-29T06:29:14.477Z pw:browser:err #28 0x558a9de93da6 content::DevToolsSession::DispatchProtocolMessage()
[1] 2020-06-29T06:29:14.482Z pw:browser:err #29 0x558a9de90310 base::internal::Invoker<>::RunOnce()
[1] 2020-06-29T06:29:14.497Z pw:browser:err #30 0x558a9fb6e3db base::TaskAnnotator::RunTask()
[1] 2020-06-29T06:29:14.515Z pw:browser:err #31 0x558a9fb7e8bd base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl()
[1] 2020-06-29T06:29:14.531Z pw:browser:err #32 0x558a9fb7e638 base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWork()
[1] 2020-06-29T06:29:14.546Z pw:browser:err #33 0x558a9fb3afa7 base::(anonymous namespace)::WorkSourceDispatch()
[1] 2020-06-29T06:29:14.547Z pw:browser:err #34 0x7f443135e417 g_main_context_dispatch
[1] 2020-06-29T06:29:14.547Z pw:browser:err #35 0x7f443135e650 (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.5600.4+0x4c64f)
[1] 2020-06-29T06:29:14.547Z pw:browser:err #36 0x7f443135e6dc g_main_context_iteration
[1] 2020-06-29T06:29:14.563Z pw:browser:err #37 0x558a9fb3ae02 base::MessagePumpGlib::Run()
[1] 2020-06-29T06:29:14.580Z pw:browser:err #38 0x558a9fb7ee55 base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::Run()
[1] 2020-06-29T06:29:14.595Z pw:browser:err #39 0x558a9fb5830e base::RunLoop::Run()
[1] 2020-06-29T06:29:14.600Z pw:browser:err #40 0x558a9de09f94 content::BrowserMainLoop::RunMainMessageLoopParts()
[1] 2020-06-29T06:29:14.606Z pw:browser:err #41 0x558a9de0bed2 content::BrowserMainRunnerImpl::Run()
[1] 2020-06-29T06:29:14.649Z pw:browser:err #42 0x558aa4431ec6 headless::HeadlessContentMainDelegate::RunProcess()
[1] 2020-06-29T06:29:14.663Z pw:browser:err #43 0x558a9f6f6c67 content::ContentMainRunnerImpl::RunServiceManager()
[1] 2020-06-29T06:29:14.676Z pw:browser:err #44 0x558a9f6f66f7 content::ContentMainRunnerImpl::Run()
[1] 2020-06-29T06:29:14.690Z pw:browser:err #45 0x558a9f7570a9 service_manager::Main()
[1] 2020-06-29T06:29:14.704Z pw:browser:err #46 0x558a9f6f4951 content::ContentMain()
[1] 2020-06-29T06:29:14.721Z pw:browser:err #47 0x558a9f7562ed headless::(anonymous namespace)::RunContentMain()
[1] 2020-06-29T06:29:14.731Z pw:browser:err #48 0x558a9f755fec headless::HeadlessShellMain()
[1] 2020-06-29T06:29:14.776Z pw:browser:err #49 0x558a9d0748a7 ChromeMain
[1] 2020-06-29T06:29:14.780Z pw:browser:err #50 0x7f442b402b97 __libc_start_main
[1] 2020-06-29T06:29:14.825Z pw:browser:err #51 0x558a9d0746ea _start
[1] 2020-06-29T06:29:14.829Z pw:browser:err   r8: 000012c6e3fea680  r9: 000012c6e36375a3 r10: 000012c6e36375db r11: 000012c6e3df0060
[1] 2020-06-29T06:29:14.829Z pw:browser:err  r12: 000012c6e2f3ec30 r13: 000012c6e3784f40 r14: 00007ffe427c85a0 r15: 000012c6e2f3ec30
[1] 2020-06-29T06:29:14.829Z pw:browser:err   di: 000012c6e2da7880  si: 00007ffe427c85a0  bp: 00007ffe427c8590  bx: 0000000000000000
[1] 2020-06-29T06:29:14.829Z pw:browser:err   dx: 000012c6e327f2c0  ax: ffffed3bb7cb112d  cx: aaaaaaaaaaaaaaaa  sp: 00007ffe427c8560
[1] 2020-06-29T06:29:14.829Z pw:browser:err   ip: 0000558a9debe035 efl: 0000000000010202 cgf: 002b000000000033 erf: 0000000000000005
[1] 2020-06-29T06:29:14.829Z pw:browser:err  trp: 000000000000000e msk: 0000000000000000 cr2: ffffed3bb7cb1135
[1] 2020-06-29T06:29:14.829Z pw:browser:err [end of stack trace]
[1] 2020-06-29T06:29:14.829Z pw:browser:err Calling _exit(1). Core file will not be generated.
[1] 2020-06-29T06:29:14.843Z pw:browser <process did exit: exitCode=1, signal=null>
[1] 2020-06-29T06:29:14.851Z pw:browser   <ws disconnected> ws://127.0.0.1:40083/2c1646de5dcd1bec0b06517e237dc560
[1] 2020-06-29T06:29:14.853Z pw:api <= chromium.connect failed
[1] 2020-06-29T06:29:14.853Z pw:browser <ws disconnecting> ws://127.0.0.1:40083/2c1646de5dcd1bec0b06517e237dc560
mxschmitt commented 4 years ago

Hi, could you provide us the JavaScript file where you use Playwright? Including options etc.

vrknetha commented 4 years ago

tsconfig.test.json

{
    "extends": "./tsconfig.json",
    "types": ["jest", "node", "jest-playwright-preset", "expect-playwright"],
    "compilerOptions": {
        "esModuleInterop": true
    }
}

jest-config.js

module.exports = {
    verbose: true,
    globals: {
        'ts-jest': {
            tsConfig: './tsconfig.test.json'
        }
    },
    preset: 'jest-playwright-preset',
    transform: {
        '^.+\\.ts$': 'ts-jest'
    },
    testMatch: ['**/playwright/e2e/**/*.test.ts'],
    reporters: [
        'default',
        [
            'jest-junit',
            {
                outputDirectory: './test-reports',
                outputName: 'results.xml',
                usePathForSuiteName: true,
                classNameTemplate: '{classname}-{title}',
                titleTemplate: '{classname}-{title}'
            }
        ],
        ['@vrknetha/jest-testrail', {project_id: '1', suite_id: '1'}]
    ],
    testRunner: 'jest-circus/runner',
    testEnvironment: './customEnvironment.ts',
    testTimeout: 100000,
    setupFilesAfterEnv: ['expect-playwright']
};

jest-playwright.config.js

// https://github.com/mmarkelov/jest-playwright/#configuration
module.exports = {
    launchOptions: {
        headless: true,
        ignoreDefaultArgs: ['--disable-extensions'],
        args: [
            '--no-sandbox',
            '--disable-setuid-sandbox',
            '--disable-dev-shm-usage',
            '--ignore-certificate-errors',
            '--unsafely-treat-insecure-origin-as-secure=https://localhost:4200/',
            '--disable-notifications'
        ]
    },
    contextOptions: {
        ignoreHTTPSErrors: true,
        viewport: {
            width: 1024,
            height: 768
        }
    },
    browsers: ['chromium'],
    collectCoverage: false
};

test-case

import FacebookUtilities from '../../utils/facebookUtilities';
import ManageGroupsPage from '../../pages/manageGroupsPage';
import deleteUser from '../../utils/database.adapter';
import {userWithSingleGroup, baseUrl} from '../../utils/credentials';
import {Page} from 'playwright';
describe('User Onboarding 2.0', () => {
    let groupUrl: string;
    let isGroupInstalled: boolean = false;
    const facebookUtilities: FacebookUtilities = new FacebookUtilities(page, context);
    const manageGroupsPage: ManageGroupsPage = new ManageGroupsPage(page, context);

    test('C9 : Verify when user logged into Convosight first time with Groups as Admin', async () => {
        //Arrange
        await page.goto(baseUrl);
        //Act
        await expect(page).toHaveSelector(facebookUtilities.BtnLogin);
        await facebookUtilities.login(userWithSingleGroup.username, userWithSingleGroup.password);
        await expect(page).toHaveSelector(facebookUtilities.BtnProfileContinue);
        await facebookUtilities.profilePopupClickContinue();
        await expect(page).toHaveSelector(facebookUtilities.BtnGroupsOk);
        await facebookUtilities.groupsPageClickOnOk();
        await manageGroupsPage.init();

        //Assert
        const title = await page.title();
        await expect(title).toEqual('Group Admin Manage Groups');
        await expect(page).toEqualText(manageGroupsPage.EleGroupsPopupTitle, 'Add app to your groups');
        groupUrl = await manageGroupsPage.getAppGroupUrl();
        const page2: Page = await context.newPage();
        const fbUtilities: FacebookUtilities = new FacebookUtilities(page2, context);
        await fbUtilities.completeGroupInstallation(groupUrl);
        await page2.close();
        isGroupInstalled = true;
        await manageGroupsPage.completeGroupSurvey();
        await expect(page).toHaveSelector(manageGroupsPage.EleAnalyzeButton);
    });

    afterAll(async function () {
        if (isGroupInstalled) await facebookUtilities.completeGroupUninstallation(groupUrl);
        await facebookUtilities.deleteConvosightPermission();
        await deleteUser(userWithSingleGroup.username);
        await page.close();
        await browser.close();
    });
});
aslushnikov commented 4 years ago

@vrknetha we were out of ideas here and the discussion stalled. What's the status of this now? Is this still relevant?

dgozman commented 3 years ago

Closing since we cannot reproduce the issue.