-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_snapshot.py
More file actions
136 lines (111 loc) · 3.94 KB
/
test_snapshot.py
File metadata and controls
136 lines (111 loc) · 3.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
"""
Tests for snapshot functionality
"""
import pytest
from sentience import SentienceBrowser, snapshot
from sentience.models import Snapshot
@pytest.mark.requires_extension
def test_snapshot_basic():
"""Test basic snapshot on example.com"""
with SentienceBrowser() as browser:
browser.page.goto("https://example.com")
browser.page.wait_for_load_state("networkidle")
snap = snapshot(browser)
assert snap.status == "success"
assert snap.url == "https://example.com/"
assert len(snap.elements) > 0
assert all(el.id >= 0 for el in snap.elements)
assert all(
el.role
in [
"button",
"link",
"textbox",
"searchbox",
"checkbox",
"radio",
"combobox",
"image",
"generic",
]
for el in snap.elements
)
@pytest.mark.requires_extension
def test_snapshot_roundtrip():
"""Test snapshot round-trip on multiple sites"""
# Use sites that reliably have elements
sites = [
"https://example.com",
]
for site in sites:
with SentienceBrowser() as browser:
browser.page.goto(site)
browser.page.wait_for_load_state("networkidle")
# Wait a bit more for dynamic content and extension processing
browser.page.wait_for_timeout(1000)
snap = snapshot(browser)
assert snap.status == "success"
assert snap.url is not None
# Most pages should have at least some elements
# But we'll be lenient - at least verify structure is valid
if len(snap.elements) > 0:
# Verify element structure
for el in snap.elements[:5]: # Check first 5
assert el.bbox.x >= 0
assert el.bbox.y >= 0
assert el.bbox.width > 0
assert el.bbox.height > 0
assert el.importance >= -300
# Note: Some pages may legitimately have 0 elements due to filtering
# (min size 5x5, visibility, etc.) - this is acceptable
@pytest.mark.requires_extension
def test_snapshot_save():
"""Test snapshot save functionality"""
import json
import os
import tempfile
with SentienceBrowser() as browser:
browser.page.goto("https://example.com")
browser.page.wait_for_load_state("networkidle")
snap = snapshot(browser)
# Save to temp file
with tempfile.NamedTemporaryFile(mode="w", suffix=".json", delete=False) as f:
temp_path = f.name
try:
snap.save(temp_path)
# Verify file exists and is valid JSON
assert os.path.exists(temp_path)
with open(temp_path) as f:
data = json.load(f)
assert data["status"] == "success"
assert "elements" in data
finally:
os.unlink(temp_path)
@pytest.mark.requires_extension
def test_snapshot_with_goal():
"""Test snapshot with goal parameter"""
with SentienceBrowser() as browser:
browser.page.goto("https://example.com")
browser.page.wait_for_load_state("networkidle")
# Test snapshot with goal
snap = snapshot(browser, goal="Find the main heading")
assert snap.status == "success"
assert snap.url == "https://example.com/"
assert len(snap.elements) > 0
# Verify snapshot works normally with goal parameter
assert all(el.id >= 0 for el in snap.elements)
assert all(
el.role
in [
"button",
"link",
"textbox",
"searchbox",
"checkbox",
"radio",
"combobox",
"image",
"generic",
]
for el in snap.elements
)