File tree 12 files changed +157
-78
lines changed
12 files changed +157
-78
lines changed Original file line number Diff line number Diff line change 14
14
.envrc
15
15
codegen.log
16
16
Brewfile.lock.json
17
+ screenshot.png
18
+ openapi.v1.yaml
Original file line number Diff line number Diff line change @@ -50,17 +50,18 @@ so that your API Key is not stored in source control.
50
50
51
51
See the [ examples] ( examples ) directory for more usage examples.
52
52
53
+ > [ !NOTE]
54
+ > Running the examples requires [ Rye] ( https://rye.astral.sh/ ) to be installed.
55
+
53
56
To run the examples, clone this repository and run the following commands from the project root (this directory):
54
57
55
58
``` bash
56
- python3 -m venv .venv
57
- source .venv/bin/activate
58
- python3 -m pip install .
59
- python3 -m examples/02_create_session.py # replace with the example you want to run
59
+ rye sync
60
+ rye run example playwright_basic # replace with the example you want to run
60
61
```
61
62
62
- !!! note
63
- Make sure you have a ` .env ` file that matches the [ .env.example] ( .env.example ) file in the root of this repository.
63
+ > [ !NOTE ]
64
+ > Make sure you have a ` .env ` file that matches the [ .env.example] ( .env.example ) file in the root of this repository.
64
65
65
66
## Async usage
66
67
Load Diff This file was deleted.
Load Diff This file was deleted.
Original file line number Diff line number Diff line change
1
+ import os
2
+
3
+ from dotenv import load_dotenv
4
+
5
+ from browserbase import Browserbase
6
+
7
+ # Load our environment variables
8
+ load_dotenv (override = True )
9
+
10
+ # Make sure we have the required environment variables
11
+ BROWSERBASE_CONNECT_URL = os .environ .get (
12
+ "BROWSERBASE_CONNECT_URL" , "wss://connect.browserbase.com"
13
+ )
14
+ _BROWSERBASE_API_KEY = os .environ .get ("BROWSERBASE_API_KEY" )
15
+ if not _BROWSERBASE_API_KEY :
16
+ raise ValueError ("BROWSERBASE_API_KEY is not set in environment" )
17
+ BROWSERBASE_API_KEY : str = _BROWSERBASE_API_KEY
18
+ _BROWSERBASE_PROJECT_ID = os .environ .get ("BROWSERBASE_PROJECT_ID" )
19
+ if not _BROWSERBASE_PROJECT_ID :
20
+ raise ValueError ("BROWSERBASE_PROJECT_ID is not set in environment" )
21
+ BROWSERBASE_PROJECT_ID = _BROWSERBASE_PROJECT_ID or ""
22
+
23
+ # Instantiate our Browserbase client
24
+ bb = Browserbase (api_key = BROWSERBASE_API_KEY )
Original file line number Diff line number Diff line change
1
+ # End-to-end tests
2
+
3
+ This directory contains end-to-end tests that run against a real Browserbase instance.
4
+
5
+ ## Running the tests
6
+
7
+ To run the tests, you will need to set the following environment variables:
8
+
9
+ - ` BROWSERBASE_API_KEY ` : Your Browserbase API key
10
+ - ` BROWSERBASE_PROJECT_ID ` : The ID of the project you want to use for the tests
11
+
12
+ You can set these variables in a ` .env ` file in the root of this directory.
13
+
14
+ Then, run the tests with:
15
+
16
+ ``` sh
17
+ $ rye run test:e2e
18
+ ```
19
+
20
+ ## Writing tests
21
+
22
+ The tests are written using pytest and the [ pytest-playwright] ( https://playwright.dev/python/docs/pytest ) plugin.
23
+
24
+ You can find more information about writing tests in the [ pytest documentation] ( https://docs.pytest.org/en/7.1.x/ ) .
25
+
26
+ To submit a test, create a new file in the ` e2e ` directory with a name that describes the test and starts with ` test_ ` .
Original file line number Diff line number Diff line change
1
+
Original file line number Diff line number Diff line change
1
+ import pytest
2
+ from playwright .sync_api import Playwright , sync_playwright
3
+
4
+ from browserbase import Browserbase
5
+
6
+ from .. import (
7
+ BROWSERBASE_API_KEY ,
8
+ playwright_basic ,
9
+ )
10
+
11
+ bb = Browserbase (api_key = BROWSERBASE_API_KEY )
12
+
13
+
14
+ @pytest .fixture (scope = "session" )
15
+ def playwright ():
16
+ with sync_playwright () as p :
17
+ yield p
18
+
19
+
20
+ def test_playwright_basic (playwright : Playwright ):
21
+ playwright_basic .run (playwright )
Original file line number Diff line number Diff line change
1
+ from playwright .sync_api import Playwright , sync_playwright
2
+
3
+ from examples import (
4
+ BROWSERBASE_API_KEY ,
5
+ BROWSERBASE_PROJECT_ID ,
6
+ BROWSERBASE_CONNECT_URL ,
7
+ bb ,
8
+ )
9
+
10
+
11
+ def run (playwright : Playwright ):
12
+ # Create a session on Browserbase
13
+ session = bb .sessions .create (project_id = BROWSERBASE_PROJECT_ID )
14
+ assert session .id is not None
15
+ assert session .status == "RUNNING" , f"Session status is { session .status } "
16
+
17
+ # Connect to the remote session
18
+ connect_url = (
19
+ f"{ BROWSERBASE_CONNECT_URL } ?sessionId={ session .id } &apiKey={ BROWSERBASE_API_KEY } "
20
+ )
21
+ chromium = playwright .chromium
22
+ browser = chromium .connect_over_cdp (connect_url )
23
+ context = browser .contexts [0 ]
24
+ page = context .pages [0 ]
25
+
26
+ # Execute Playwright actions on the remote browser tab
27
+ page .goto ("https://news.ycombinator.com/" )
28
+ page_title = page .title ()
29
+ assert (
30
+ page_title == "Hacker News"
31
+ ), f"Page title is not 'Hacker News', it is '{ page_title } '"
32
+ page .screenshot (path = "screenshot.png" )
33
+
34
+ page .close ()
35
+ browser .close ()
36
+ print ("Done!" )
37
+
38
+
39
+ if __name__ == "__main__" :
40
+ with sync_playwright () as playwright :
41
+ run (playwright )
Original file line number Diff line number Diff line change @@ -50,12 +50,15 @@ dev-dependencies = [
50
50
" respx" ,
51
51
" pytest" ,
52
52
" pytest-asyncio" ,
53
+ " pytest-playwright" ,
53
54
" ruff" ,
54
55
" time-machine" ,
55
56
" nox" ,
56
57
" dirty-equals>=0.6.0" ,
57
58
" importlib-metadata>=6.7.0" ,
58
59
" rich>=13.7.1" ,
60
+ " python-dotenv" ,
61
+ " playwright" ,
59
62
]
60
63
61
64
[tool .rye .scripts ]
@@ -79,10 +82,15 @@ format = { chain = [
79
82
80
83
"check:importable" = " python -c 'import browserbase'"
81
84
85
+ "example" = " python -c 'import sys; from pathlib import Path; example = Path(\" examples\" ) / (sys.argv[1] + \" .py\" ); exec(open(example).read())'"
86
+
87
+ "test:e2e" = " python -m pytest examples/e2e"
88
+
82
89
typecheck = { chain = [
83
90
" typecheck:pyright" ,
84
91
" typecheck:mypy"
85
92
]}
93
+
86
94
"typecheck:pyright" = " pyright"
87
95
"typecheck:verify-types" = " pyright --verifytypes browserbase --ignoreexternal"
88
96
"typecheck:mypy" = " mypy ."
Original file line number Diff line number Diff line change 7
7
# all-features: true
8
8
# with-sources: false
9
9
# generate-hashes: false
10
+ # universal: false
10
11
11
12
-e file:.
12
13
annotated-types==0.6.0
@@ -21,6 +22,9 @@ attrs==23.1.0
21
22
certifi==2023.7.22
22
23
# via httpcore
23
24
# via httpx
25
+ # via requests
26
+ charset-normalizer==3.4.0
27
+ # via requests
24
28
colorlog==6.7.0
25
29
# via nox
26
30
dirty-equals==0.6.0
@@ -32,6 +36,8 @@ exceptiongroup==1.1.3
32
36
# via anyio
33
37
filelock==3.12.4
34
38
# via virtualenv
39
+ greenlet==3.1.1
40
+ # via playwright
35
41
h11==0.14.0
36
42
# via httpcore
37
43
httpcore==1.0.2
@@ -42,6 +48,7 @@ httpx==0.25.2
42
48
idna==3.4
43
49
# via anyio
44
50
# via httpx
51
+ # via requests
45
52
importlib-metadata==7.0.0
46
53
iniconfig==2.0.0
47
54
# via pytest
@@ -60,6 +67,8 @@ packaging==23.2
60
67
# via pytest
61
68
platformdirs==3.11.0
62
69
# via virtualenv
70
+ playwright==1.48.0
71
+ # via pytest-playwright
63
72
pluggy==1.3.0
64
73
# via pytest
65
74
py==1.11.0
@@ -68,16 +77,28 @@ pydantic==2.7.1
68
77
# via browserbase
69
78
pydantic-core==2.18.2
70
79
# via pydantic
80
+ pyee==12.0.0
81
+ # via playwright
71
82
pygments==2.18.0
72
83
# via rich
73
84
pyright==1.1.380
74
85
pytest==7.1.1
75
86
# via pytest-asyncio
87
+ # via pytest-base-url
88
+ # via pytest-playwright
76
89
pytest-asyncio==0.21.1
90
+ pytest-base-url==2.1.0
91
+ # via pytest-playwright
92
+ pytest-playwright==0.5.2
77
93
python-dateutil==2.8.2
78
94
# via time-machine
95
+ python-dotenv==1.0.1
96
+ python-slugify==8.0.4
97
+ # via pytest-playwright
79
98
pytz==2023.3.post1
80
99
# via dirty-equals
100
+ requests==2.32.3
101
+ # via pytest-base-url
81
102
respx==0.20.2
82
103
rich==13.7.1
83
104
ruff==0.6.9
@@ -89,6 +110,8 @@ sniffio==1.3.0
89
110
# via anyio
90
111
# via browserbase
91
112
# via httpx
113
+ text-unidecode==1.3
114
+ # via python-slugify
92
115
time-machine==2.9.0
93
116
tomli==2.0.1
94
117
# via mypy
@@ -99,6 +122,9 @@ typing-extensions==4.8.0
99
122
# via mypy
100
123
# via pydantic
101
124
# via pydantic-core
125
+ # via pyee
126
+ urllib3==2.2.3
127
+ # via requests
102
128
virtualenv==20.24.5
103
129
# via nox
104
130
zipp==3.17.0
Original file line number Diff line number Diff line change 7
7
# all-features: true
8
8
# with-sources: false
9
9
# generate-hashes: false
10
+ # universal: false
10
11
11
12
-e file:.
12
13
annotated-types==0.6.0
You can’t perform that action at this time.
0 commit comments