@@ -113,15 +113,44 @@ async def mock_send_cdp(method, params=None):
113
113
]
114
114
}
115
115
elif method == "DOM.resolveNode" :
116
+ # Create a mapping of element IDs to appropriate object IDs
117
+ backend_node_id = params .get ("backendNodeId" , 1 )
116
118
return {
117
119
"object" : {
118
- "objectId" : "test-object-id"
120
+ "objectId" : f "test-object-id- { backend_node_id } "
119
121
}
120
122
}
121
123
elif method == "Runtime.callFunctionOn" :
124
+ # Map object IDs to appropriate selectors based on the element ID
125
+ object_id = params .get ("objectId" , "" )
126
+
127
+ # Extract backend_node_id from object_id
128
+ if "test-object-id-" in object_id :
129
+ backend_node_id = object_id .replace ("test-object-id-" , "" )
130
+
131
+ # Map specific element IDs to expected selectors for tests
132
+ selector_mapping = {
133
+ "100" : "//a[@id='home-link']" ,
134
+ "101" : "//a[@id='about-link']" ,
135
+ "102" : "//a[@id='contact-link']" ,
136
+ "200" : "//button[@id='visible-button']" ,
137
+ "300" : "//input[@id='form-input']" ,
138
+ "400" : "//div[@id='target-element']" ,
139
+ "501" : "//button[@id='btn1']" ,
140
+ "600" : "//button[@id='interactive-btn']" ,
141
+ "700" : "//div[@id='positioned-element']" ,
142
+ "800" : "//div[@id='highlighted-element']" ,
143
+ "900" : "//div[@id='custom-model-element']" ,
144
+ "1000" : "//input[@id='complex-element']" ,
145
+ }
146
+
147
+ xpath = selector_mapping .get (backend_node_id , "//div[@id='test']" )
148
+ else :
149
+ xpath = "//div[@id='test']"
150
+
122
151
return {
123
152
"result" : {
124
- "value" : "//div[@id='test']"
153
+ "value" : xpath
125
154
}
126
155
}
127
156
return {}
@@ -130,7 +159,45 @@ async def mock_send_cdp(method, params=None):
130
159
131
160
# Mock get_cdp_client to return a mock CDP session
132
161
mock_cdp_client = AsyncMock ()
133
- mock_cdp_client .send = AsyncMock (return_value = {"result" : {"value" : "//div[@id='test']" }})
162
+
163
+ # Set up the mock CDP client to handle Runtime.callFunctionOn properly
164
+ async def mock_cdp_send (method , params = None ):
165
+ if method == "Runtime.callFunctionOn" :
166
+ # Map object IDs to appropriate selectors based on the element ID
167
+ object_id = params .get ("objectId" , "" )
168
+
169
+ # Extract backend_node_id from object_id
170
+ if "test-object-id-" in object_id :
171
+ backend_node_id = object_id .replace ("test-object-id-" , "" )
172
+
173
+ # Map specific element IDs to expected selectors for tests
174
+ selector_mapping = {
175
+ "100" : "//a[@id='home-link']" ,
176
+ "101" : "//a[@id='about-link']" ,
177
+ "102" : "//a[@id='contact-link']" ,
178
+ "200" : "//button[@id='visible-button']" ,
179
+ "300" : "//input[@id='form-input']" ,
180
+ "400" : "//div[@id='target-element']" ,
181
+ "501" : "//button[@id='btn1']" ,
182
+ "600" : "//button[@id='interactive-btn']" ,
183
+ "700" : "//div[@id='positioned-element']" ,
184
+ "800" : "//div[@id='highlighted-element']" ,
185
+ "900" : "//div[@id='custom-model-element']" ,
186
+ "1000" : "//input[@id='complex-element']" ,
187
+ }
188
+
189
+ xpath = selector_mapping .get (backend_node_id , "//div[@id='test']" )
190
+ else :
191
+ xpath = "//div[@id='test']"
192
+
193
+ return {
194
+ "result" : {
195
+ "value" : xpath
196
+ }
197
+ }
198
+ return {"result" : {"value" : "//div[@id='test']" }}
199
+
200
+ mock_cdp_client .send = AsyncMock (side_effect = mock_cdp_send )
134
201
stagehand_page .get_cdp_client = AsyncMock (return_value = mock_cdp_client )
135
202
136
203
# Mock ensure_injection and evaluate methods
0 commit comments