@@ -24,7 +24,7 @@ def test_topology_manual(browser):
24
24
# Open the Service Topology page
25
25
browser .get_by_role ("link" , name = "Service Topology" ).hover ()
26
26
browser .get_by_role ("link" , name = "Service Topology" ).click ()
27
- browser .wait_for_timeout (2000 ) # Added extra wait for page to fully load
27
+ browser .wait_for_timeout (5000 ) # Added extra wait for page to fully load
28
28
29
29
max_retries = 5
30
30
retries = 0
@@ -33,9 +33,11 @@ def test_topology_manual(browser):
33
33
while retries <= max_retries :
34
34
try :
35
35
browser .get_by_role ("button" , name = "Add Node" , exact = True ).click ()
36
+ browser .wait_for_timeout (2000 )
36
37
browser .get_by_placeholder ("Enter service here..." ).fill ("service_id_1" )
37
38
break
38
39
except Exception :
40
+ raise
39
41
if retries == max_retries :
40
42
raise
41
43
retries += 1
@@ -89,9 +91,7 @@ def test_topology_manual(browser):
89
91
browser .wait_for_timeout (2000 )
90
92
91
93
# Improved edge connection with retries
92
- def connect_nodes (source_selector , target_selector , edge_label , max_attempts = 3 ):
93
- source_handle = browser .locator (source_selector )
94
- target_handle = browser .locator (target_selector )
94
+ def connect_nodes (source_handle , target_handle , edge_label , max_attempts = 3 ):
95
95
96
96
for attempt in range (max_attempts ):
97
97
try :
@@ -151,14 +151,18 @@ def connect_nodes(source_selector, target_selector, edge_label, max_attempts=3):
151
151
node_2 = browser .locator ("div.react-flow__node-service" ).filter (has_text = "SERVICE_ID_2" )
152
152
node_3 = browser .locator ("div.react-flow__node-service" ).filter (has_text = "SERVICE_ID_3" )
153
153
154
+ node_1_id = node_1 .get_attribute ('data-id' )
155
+ node_2_id = node_2 .get_attribute ('data-id' )
156
+ node_3_id = node_3 .get_attribute ('data-id' )
157
+
154
158
# Connect nodes by dragging source to target handles
155
- source_handle_1 = node_1 .locator ("div[data-handlepos=' right']" )
156
- target_handle_2 = node_2 .locator ("div[data-handlepos=' left']" )
157
- target_handle_3 = node_3 .locator ("div[data-handlepos=' left']" )
159
+ source_handle_1 = node_1 .locator (f "div[data-id='1- { node_1_id } - right-source ']" )
160
+ target_handle_2 = node_2 .locator (f "div[data-id='1- { node_2_id } - left-target ']" )
161
+ target_handle_3 = node_3 .locator (f "div[data-id='1- { node_3_id } - left-target ']" )
158
162
159
163
# Connect nodes with retry logic
160
164
edge1_created = connect_nodes (
161
- source_handle_1 , target_handle_2 , "Edge from 1 to 2 "
165
+ source_handle_1 , target_handle_2 , f "Edge from { node_1_id } to { node_2_id } "
162
166
)
163
167
if not edge1_created :
164
168
# Take diagnostic screenshots
@@ -167,7 +171,7 @@ def connect_nodes(source_selector, target_selector, edge_label, max_attempts=3):
167
171
print ("Failed to create edge from node 1 to node 2 after multiple attempts" )
168
172
169
173
edge2_created = connect_nodes (
170
- source_handle_1 , target_handle_3 , "Edge from 1 to 3 "
174
+ source_handle_1 , target_handle_3 , f "Edge from { node_1_id } to { node_3_id } "
171
175
)
172
176
if not edge2_created :
173
177
# Take diagnostic screenshots
@@ -177,9 +181,9 @@ def connect_nodes(source_selector, target_selector, edge_label, max_attempts=3):
177
181
178
182
# Validate edge connections with more flexible assertions
179
183
browser .wait_for_timeout (2000 )
180
- edge_1_to_2 = browser .locator ("g.react-flow__edge" ). first
184
+ edge_1_to_2 = browser .locator (f "g.react-flow__edge[aria-label='Edge from { node_1_id } to { node_2_id } ']" )
181
185
expect (edge_1_to_2 ).to_have_count (1 , timeout = 10000 ) # Increased timeout
182
- edge_1_to_3 = browser .locator ("g.react-flow__edge" ). last
186
+ edge_1_to_3 = browser .locator (f "g.react-flow__edge[aria-label='Edge from { node_1_id } to { node_3_id } ']" )
183
187
expect (edge_1_to_3 ).to_have_count (1 , timeout = 10000 ) # Increased timeout
184
188
185
189
# Continue with rest of the test...
@@ -193,10 +197,26 @@ def connect_nodes(source_selector, target_selector, edge_label, max_attempts=3):
193
197
194
198
# Ensure edge was deleted with retry
195
199
for _ in range (5 ):
196
- if browser .locator ("g.react-flow__edge" ).count () == 1 :
197
- break
200
+ if (
201
+ browser .locator (
202
+ f"g.react-flow__edge[aria-label='Edge from { node_1_id } to { node_2_id } ']"
203
+ ).count ()
204
+ == 0
205
+ ):
206
+ if browser .locator ("g.react-flow__edge" ).count () == 1 :
207
+ break
198
208
browser .wait_for_timeout (1000 )
199
209
210
+ expect (
211
+ browser .locator (f"g.react-flow__edge[aria-label='Edge { node_1_id } to { node_2_id } ']" )
212
+ ).to_have_count (0 , timeout = 5000 )
213
+
214
+ # Ensure remaining edges are intact
215
+ expect (
216
+ browser .locator (f"g.react-flow__edge[aria-label='Edge from { node_1_id } to { node_3_id } ']" )
217
+ ).to_have_count (1 , timeout = 5000 )
218
+ browser .wait_for_timeout (2000 )
219
+
200
220
# Delete a node and ensure related edges are removed
201
221
node_to_delete = browser .locator ("div.react-flow__node" ).filter (
202
222
has_text = "SERVICE_ID_1"
@@ -226,15 +246,15 @@ def connect_nodes(source_selector, target_selector, edge_label, max_attempts=3):
226
246
for _ in range (5 ):
227
247
if (
228
248
browser .locator (
229
- "g.react-flow__edge[aria-label='Edge from 1 to 3 ']"
249
+ f "g.react-flow__edge[aria-label='Edge from { node_1_id } to { node_3_id } ']"
230
250
).count ()
231
251
== 0
232
252
):
233
253
break
234
254
browser .wait_for_timeout (1000 )
235
255
236
256
expect (
237
- browser .locator ("g.react-flow__edge" )
257
+ browser .locator (f "g.react-flow__edge[aria-label='Edge from { node_1_id } to { node_3_id } '] " )
238
258
).to_have_count (0 , timeout = 5000 )
239
259
240
260
# Update node name and verify the change
0 commit comments