> For the complete documentation index, see [llms.txt](https://testingvn.gitbook.io/playwright/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://testingvn.gitbook.io/playwright/implement-test-cases/handle-jsalert-popup.md).

# Handle JSAlert Popup

```typescript
import {test, expect} from '@playwright/test';

test('js alert', async ({page}) => {
    await page.goto("/javascript_alerts")
    await page.getByRole('button', { name: 'Click for JS Alert' }).click();
    
    page.on('dialog', async (dialog) => {
        expect(dialog.message()).toEqual('I am a JS Alert')
        await dialog.accept();
    });

    await expect(page.getByText('You successfully clicked an alert')).toBeVisible();
})

test('js confirm =>cancel', async ({page}) => {
    await page.goto("/javascript_alerts")
    await page.getByRole('button', { name: 'Click for JS Confirm' }).click();
    
    page.on('dialog', async (dialog) => {
        expect(dialog.message()).toEqual('I am a JS Confirm')
        await dialog.dismiss();
    });

    await expect(page.getByText('You clicked: Cancel')).toBeVisible();
})

test('js confirm =>OK', async ({page}) => {
    await page.goto("/javascript_alerts")
    await page.getByRole('button', { name: 'Click for JS Confirm' }).click();
    
    page.on('dialog', async (dialog) => {
        expect(dialog.message()).toEqual('I am a JS Confirm')
        await dialog.accept();
    });

    await expect(page.getByText('You clicked: OK')).toBeVisible();
})
test('js prompt ', async ({page}) => {
    page.on('dialog', async (dialog) => {
        expect(dialog.message()).toEqual('I am a JS prompt')
        await dialog.accept('Hello World/n');
    });

    await page.goto("/javascript_alerts")
    await page.getByRole('button', { name: 'Click for JS Prompt' }).click();
    await expect(page.getByText('You entered: Hello World')).toBeVisible();
})
```
