Skip to content

Commit da81791

Browse files
authored
Merge pull request #18 from SentienceAPI/fix_release2
fix tests
2 parents 2587062 + 43feeca commit da81791

File tree

12 files changed

+54
-39
lines changed

12 files changed

+54
-39
lines changed

sentience/browser.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def __init__(
2424
self,
2525
api_key: Optional[str] = None,
2626
api_url: Optional[str] = None,
27-
headless: bool = False
27+
headless: Optional[bool] = None
2828
):
2929
"""
3030
Initialize Sentience browser
@@ -36,7 +36,7 @@ def __init__(
3636
If None and api_key is provided, uses default URL
3737
If None and no api_key, uses free tier (local extension only)
3838
If 'local' or Docker sidecar URL, uses Enterprise tier
39-
headless: Whether to run in headless mode
39+
headless: Whether to run in headless mode. If None, defaults to True in CI, False otherwise
4040
"""
4141
self.api_key = api_key
4242
# Only set api_url if api_key is provided, otherwise None (free tier)
@@ -45,7 +45,12 @@ def __init__(
4545
self.api_url = api_url or "https://api.sentienceapi.com"
4646
else:
4747
self.api_url = None
48-
self.headless = headless
48+
# Default to headless=True in CI (no X server), headless=False locally
49+
if headless is None:
50+
import os
51+
self.headless = os.getenv("CI", "").lower() in ("true", "1", "yes")
52+
else:
53+
self.headless = headless
4954
self.playwright: Optional[Playwright] = None
5055
self.context: Optional[BrowserContext] = None
5156
self.page: Optional[Page] = None

tests/conftest.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@ def pytest_configure(config):
1313
)
1414

1515

16+
@pytest.fixture
17+
def headless():
18+
"""Fixture that returns headless mode based on CI environment"""
19+
# In CI, always use headless mode (no X server available)
20+
# Locally, default to False (headed) for better debugging
21+
return os.getenv("CI", "").lower() in ("true", "1", "yes")
22+
23+
1624
@pytest.fixture(scope="session")
1725
def extension_available():
1826
"""Check if the sentience-chrome extension is available"""

tests/test_actions.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
def test_click():
1010
"""Test click action"""
11-
with SentienceBrowser(headless=False) as browser:
11+
with SentienceBrowser() as browser:
1212
browser.page.goto("https://example.com")
1313
browser.page.wait_for_load_state("networkidle")
1414

@@ -24,7 +24,7 @@ def test_click():
2424

2525
def test_type_text():
2626
"""Test type action"""
27-
with SentienceBrowser(headless=False) as browser:
27+
with SentienceBrowser() as browser:
2828
# Use a page with a text input
2929
browser.page.goto("https://example.com")
3030
browser.page.wait_for_load_state("networkidle")
@@ -41,7 +41,7 @@ def test_type_text():
4141

4242
def test_press():
4343
"""Test press action"""
44-
with SentienceBrowser(headless=False) as browser:
44+
with SentienceBrowser() as browser:
4545
browser.page.goto("https://example.com")
4646
browser.page.wait_for_load_state("networkidle")
4747

tests/test_generator.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
def test_generator_python():
1414
"""Test Python script generation"""
15-
with SentienceBrowser(headless=False) as browser:
15+
with SentienceBrowser() as browser:
1616
browser.page.goto("https://example.com")
1717
browser.page.wait_for_load_state("networkidle")
1818

@@ -37,7 +37,7 @@ def test_generator_python():
3737

3838
def test_generator_typescript():
3939
"""Test TypeScript script generation"""
40-
with SentienceBrowser(headless=False) as browser:
40+
with SentienceBrowser() as browser:
4141
browser.page.goto("https://example.com")
4242
browser.page.wait_for_load_state("networkidle")
4343

@@ -57,7 +57,7 @@ def test_generator_typescript():
5757

5858
def test_generator_save_python():
5959
"""Test saving generated Python script"""
60-
with SentienceBrowser(headless=False) as browser:
60+
with SentienceBrowser() as browser:
6161
browser.page.goto("https://example.com")
6262
browser.page.wait_for_load_state("networkidle")
6363

@@ -82,7 +82,7 @@ def test_generator_save_python():
8282

8383
def test_generator_save_typescript():
8484
"""Test saving generated TypeScript script"""
85-
with SentienceBrowser(headless=False) as browser:
85+
with SentienceBrowser() as browser:
8686
browser.page.goto("https://example.com")
8787
browser.page.wait_for_load_state("networkidle")
8888

@@ -107,7 +107,7 @@ def test_generator_save_typescript():
107107

108108
def test_generator_without_selector():
109109
"""Test generator handles steps without selectors"""
110-
with SentienceBrowser(headless=False) as browser:
110+
with SentienceBrowser() as browser:
111111
browser.page.goto("https://example.com")
112112
browser.page.wait_for_load_state("networkidle")
113113

@@ -124,7 +124,7 @@ def test_generator_without_selector():
124124

125125
def test_generate_helper():
126126
"""Test generate() helper function"""
127-
with SentienceBrowser(headless=False) as browser:
127+
with SentienceBrowser() as browser:
128128
browser.page.goto("https://example.com")
129129
browser.page.wait_for_load_state("networkidle")
130130

tests/test_inspector.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
def test_inspector_start_stop():
1010
"""Test inspector can start and stop"""
11-
with SentienceBrowser(headless=False) as browser:
11+
with SentienceBrowser() as browser:
1212
browser.page.goto("https://example.com")
1313
browser.page.wait_for_load_state("networkidle")
1414

@@ -28,7 +28,7 @@ def test_inspector_start_stop():
2828

2929
def test_inspector_context_manager():
3030
"""Test inspector as context manager"""
31-
with SentienceBrowser(headless=False) as browser:
31+
with SentienceBrowser() as browser:
3232
browser.page.goto("https://example.com")
3333
browser.page.wait_for_load_state("networkidle")
3434

@@ -44,7 +44,7 @@ def test_inspector_context_manager():
4444

4545
def test_inspector_mouse_move_detection():
4646
"""Test inspector detects mouse move"""
47-
with SentienceBrowser(headless=False) as browser:
47+
with SentienceBrowser() as browser:
4848
browser.page.goto("https://example.com")
4949
browser.page.wait_for_load_state("networkidle")
5050

@@ -60,7 +60,7 @@ def test_inspector_mouse_move_detection():
6060

6161
def test_inspector_click_detection():
6262
"""Test inspector detects clicks"""
63-
with SentienceBrowser(headless=False) as browser:
63+
with SentienceBrowser() as browser:
6464
browser.page.goto("https://example.com")
6565
browser.page.wait_for_load_state("networkidle")
6666

tests/test_query.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ def test_match_element():
155155

156156
def test_query_integration():
157157
"""Test query on real page"""
158-
with SentienceBrowser(headless=False) as browser:
158+
with SentienceBrowser() as browser:
159159
browser.page.goto("https://example.com")
160160
browser.page.wait_for_load_state("networkidle")
161161

@@ -174,7 +174,7 @@ def test_query_integration():
174174

175175
def test_find_integration():
176176
"""Test find on real page"""
177-
with SentienceBrowser(headless=False) as browser:
177+
with SentienceBrowser() as browser:
178178
browser.page.goto("https://example.com")
179179
browser.page.wait_for_load_state("networkidle")
180180

tests/test_recorder.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
def test_recorder_start_stop():
1313
"""Test recorder can start and stop"""
14-
with SentienceBrowser(headless=False) as browser:
14+
with SentienceBrowser() as browser:
1515
browser.page.goto("https://example.com")
1616
browser.page.wait_for_load_state("networkidle")
1717

@@ -26,7 +26,7 @@ def test_recorder_start_stop():
2626

2727
def test_recorder_context_manager():
2828
"""Test recorder as context manager"""
29-
with SentienceBrowser(headless=False) as browser:
29+
with SentienceBrowser() as browser:
3030
browser.page.goto("https://example.com")
3131
browser.page.wait_for_load_state("networkidle")
3232

@@ -39,7 +39,7 @@ def test_recorder_context_manager():
3939

4040
def test_recorder_navigation():
4141
"""Test recording navigation events"""
42-
with SentienceBrowser(headless=False) as browser:
42+
with SentienceBrowser() as browser:
4343
browser.page.goto("https://example.com")
4444
browser.page.wait_for_load_state("networkidle")
4545

@@ -53,7 +53,7 @@ def test_recorder_navigation():
5353

5454
def test_recorder_click():
5555
"""Test recording click events"""
56-
with SentienceBrowser(headless=False) as browser:
56+
with SentienceBrowser() as browser:
5757
browser.page.goto("https://example.com")
5858
browser.page.wait_for_load_state("networkidle")
5959

@@ -68,7 +68,7 @@ def test_recorder_click():
6868

6969
def test_recorder_type():
7070
"""Test recording type events"""
71-
with SentienceBrowser(headless=False) as browser:
71+
with SentienceBrowser() as browser:
7272
browser.page.goto("https://example.com")
7373
browser.page.wait_for_load_state("networkidle")
7474

@@ -84,7 +84,7 @@ def test_recorder_type():
8484

8585
def test_recorder_type_masking():
8686
"""Test text masking in type events"""
87-
with SentienceBrowser(headless=False) as browser:
87+
with SentienceBrowser() as browser:
8888
browser.page.goto("https://example.com")
8989
browser.page.wait_for_load_state("networkidle")
9090

@@ -98,7 +98,7 @@ def test_recorder_type_masking():
9898

9999
def test_recorder_press():
100100
"""Test recording key press events"""
101-
with SentienceBrowser(headless=False) as browser:
101+
with SentienceBrowser() as browser:
102102
browser.page.goto("https://example.com")
103103
browser.page.wait_for_load_state("networkidle")
104104

@@ -112,7 +112,7 @@ def test_recorder_press():
112112

113113
def test_trace_save_load():
114114
"""Test trace save and load"""
115-
with SentienceBrowser(headless=False) as browser:
115+
with SentienceBrowser() as browser:
116116
browser.page.goto("https://example.com")
117117
browser.page.wait_for_load_state("networkidle")
118118

@@ -142,7 +142,7 @@ def test_trace_save_load():
142142

143143
def test_trace_format():
144144
"""Test trace format matches spec"""
145-
with SentienceBrowser(headless=False) as browser:
145+
with SentienceBrowser() as browser:
146146
browser.page.goto("https://example.com")
147147
browser.page.wait_for_load_state("networkidle")
148148

tests/test_smart_selector.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
def test_smart_selector_inference():
1010
"""Test that recorder infers selectors automatically"""
11-
with SentienceBrowser(headless=False) as browser:
11+
with SentienceBrowser() as browser:
1212
browser.page.goto("https://example.com")
1313
browser.page.wait_for_load_state("networkidle")
1414

@@ -30,7 +30,7 @@ def test_smart_selector_inference():
3030

3131
def test_smart_selector_with_text():
3232
"""Test selector inference for elements with text"""
33-
with SentienceBrowser(headless=False) as browser:
33+
with SentienceBrowser() as browser:
3434
browser.page.goto("https://example.com")
3535
browser.page.wait_for_load_state("networkidle")
3636

@@ -54,7 +54,7 @@ def test_smart_selector_with_text():
5454

5555
def test_smart_selector_validation():
5656
"""Test that inferred selectors are validated"""
57-
with SentienceBrowser(headless=False) as browser:
57+
with SentienceBrowser() as browser:
5858
browser.page.goto("https://example.com")
5959
browser.page.wait_for_load_state("networkidle")
6060

tests/test_snapshot.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
@pytest.mark.requires_extension
1111
def test_snapshot_basic():
1212
"""Test basic snapshot on example.com"""
13-
with SentienceBrowser(headless=False) as browser:
13+
with SentienceBrowser() as browser:
1414
browser.page.goto("https://example.com")
1515
browser.page.wait_for_load_state("networkidle")
1616

@@ -33,7 +33,7 @@ def test_snapshot_roundtrip():
3333
]
3434

3535
for site in sites:
36-
with SentienceBrowser(headless=False) as browser:
36+
with SentienceBrowser() as browser:
3737
browser.page.goto(site)
3838
browser.page.wait_for_load_state("networkidle")
3939

@@ -66,7 +66,7 @@ def test_snapshot_save():
6666
import os
6767
import json
6868

69-
with SentienceBrowser(headless=False) as browser:
69+
with SentienceBrowser() as browser:
7070
browser.page.goto("https://example.com")
7171
browser.page.wait_for_load_state("networkidle")
7272

tests/test_spec_validation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def test_snapshot_matches_spec():
6565
"""Test that snapshot response matches spec schema"""
6666
schema = load_schema()
6767

68-
with SentienceBrowser(headless=False) as browser:
68+
with SentienceBrowser() as browser:
6969
browser.page.goto("https://example.com")
7070
browser.page.wait_for_load_state("networkidle")
7171

0 commit comments

Comments
 (0)