Skip to content

Commit eeb9e8f

Browse files
authored
Merge pull request #12 from browserbase/anirudh/add-playwright-e2e
Port over e2e tests from core
2 parents 3f523dc + 6b95755 commit eeb9e8f

18 files changed

+1958
-30
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ dist
1515
codegen.log
1616
Brewfile.lock.json
1717
screenshot.png
18-
openapi.v1.yaml
18+
**/.DS_Store

examples/e2e/test_playwright.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import os
2+
from typing import Generator
3+
4+
import pytest
5+
from dotenv import load_dotenv
6+
from playwright.sync_api import Playwright, sync_playwright
7+
8+
from browserbase import Browserbase
9+
10+
from .. import (
11+
BROWSERBASE_API_KEY,
12+
playwright_basic,
13+
playwright_proxy,
14+
playwright_upload,
15+
playwright_captcha,
16+
playwright_contexts,
17+
playwright_downloads,
18+
)
19+
20+
bb = Browserbase(api_key=BROWSERBASE_API_KEY)
21+
load_dotenv()
22+
23+
CI = os.getenv("CI", "false").lower() == "true"
24+
25+
26+
@pytest.fixture(scope="session")
27+
def playwright() -> Generator[Playwright, None, None]:
28+
with sync_playwright() as p:
29+
yield p
30+
31+
32+
def test_playwright_basic(playwright: Playwright) -> None:
33+
playwright_basic.run(playwright)
34+
35+
36+
@pytest.mark.skipif(True, reason="Flaky and fails often")
37+
def test_playwright_captcha(playwright: Playwright) -> None:
38+
playwright_captcha.run(playwright)
39+
40+
41+
def test_playwright_contexts(playwright: Playwright) -> None:
42+
playwright_contexts.run(playwright)
43+
44+
45+
def test_playwright_downloads(playwright: Playwright) -> None:
46+
playwright_downloads.run(playwright)
47+
48+
49+
def test_playwright_proxy_enable_via_create_session(playwright: Playwright) -> None:
50+
playwright_proxy.run_enable_via_create_session(playwright)
51+
52+
53+
def test_playwright_proxy_enable_via_querystring(playwright: Playwright) -> None:
54+
playwright_proxy.run_enable_via_querystring_with_created_session(playwright)
55+
56+
57+
@pytest.mark.skipif(CI, reason="Flaky and fails on CI")
58+
def test_playwright_proxy_geolocation_country(playwright: Playwright) -> None:
59+
playwright_proxy.run_geolocation_country(playwright)
60+
61+
62+
@pytest.mark.skipif(CI, reason="Flaky and fails on CI")
63+
def test_playwright_proxy_geolocation_state(playwright: Playwright) -> None:
64+
playwright_proxy.run_geolocation_state(playwright)
65+
66+
67+
@pytest.mark.skipif(CI, reason="Flaky and fails on CI")
68+
def test_playwright_proxy_geolocation_american_city(playwright: Playwright) -> None:
69+
playwright_proxy.run_geolocation_american_city(playwright)
70+
71+
72+
@pytest.mark.skipif(CI, reason="Flaky and fails on CI")
73+
def test_playwright_proxy_geolocation_non_american_city(playwright: Playwright) -> None:
74+
playwright_proxy.run_geolocation_non_american_city(playwright)
75+
76+
77+
def test_playwright_upload(playwright: Playwright) -> None:
78+
playwright_upload.run(playwright)

examples/e2e/test_playwright_basic.py

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.zip
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<html>
2+
<body>
3+
<h1>Hello Extensions</h1>
4+
</body>
5+
</html>
5.81 KB
Loading
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"manifest_version": 3,
3+
"name": "Browserbase Extension Test",
4+
"description": "Test extension for browserbase",
5+
"version": "1.0",
6+
"action": {
7+
"default_popup": "hello.html"
8+
},
9+
"content_scripts": [
10+
{
11+
"matches": ["https://www.browserbase.com/*"],
12+
"js": ["scripts/content.js"]
13+
}
14+
],
15+
"web_accessible_resources": [
16+
{
17+
"resources": ["images/logo.png"],
18+
"matches": ["https://www.browserbase.com/*"]
19+
}
20+
]
21+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
const imageUrl = chrome.runtime.getURL("images/logo.png");
2+
window
3+
.fetch(imageUrl)
4+
.then((response) => {
5+
if (response.ok) {
6+
console.log("browserbase test extension image loaded");
7+
}
8+
})
9+
.catch((error) => {
10+
console.log(error);
11+
});

examples/packages/logo.png

5.81 KB
Loading

examples/playwright_basic.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,20 @@
11
from playwright.sync_api import Playwright, sync_playwright
22

33
from examples import (
4-
BROWSERBASE_API_KEY,
54
BROWSERBASE_PROJECT_ID,
6-
BROWSERBASE_CONNECT_URL,
75
bb,
86
)
97

108

11-
def run(playwright: Playwright):
9+
def run(playwright: Playwright) -> None:
1210
# Create a session on Browserbase
1311
session = bb.sessions.create(project_id=BROWSERBASE_PROJECT_ID)
1412
assert session.id is not None
1513
assert session.status == "RUNNING", f"Session status is {session.status}"
1614

1715
# Connect to the remote session
18-
connect_url = (
19-
f"{BROWSERBASE_CONNECT_URL}?sessionId={session.id}&apiKey={BROWSERBASE_API_KEY}"
20-
)
2116
chromium = playwright.chromium
22-
browser = chromium.connect_over_cdp(connect_url)
17+
browser = chromium.connect_over_cdp(session.connect_url)
2318
context = browser.contexts[0]
2419
page = context.pages[0]
2520

0 commit comments

Comments
 (0)