@@ -230,6 +230,11 @@ def process_test_file(
230
230
for line in code_lines :
231
231
line = line .rstrip ()
232
232
233
+ # Keep lines with "%s" in them as they were
234
+ if r"%s" in line :
235
+ seleniumbase_lines .append (line )
236
+ continue
237
+
233
238
# Handle self.click(SELECTOR)
234
239
if not object_dict :
235
240
data = re .match (
@@ -387,6 +392,59 @@ def process_test_file(
387
392
seleniumbase_lines .append (command )
388
393
continue
389
394
395
+ # Handle self.double_click(SELECTOR)
396
+ if not object_dict :
397
+ data = re .match (
398
+ r"""^(\s*)self\.double_click"""
399
+ r"""\((r?['"][\S\s]+['"])\)([\S\s]*)"""
400
+ r"""$""" ,
401
+ line ,
402
+ )
403
+ else :
404
+ data = re .match (
405
+ r"""^(\s*)self\.double_click"""
406
+ r"""\(([\S]+)\)([\S\s]*)"""
407
+ r"""$""" ,
408
+ line ,
409
+ )
410
+ if data :
411
+ whitespace = data .group (1 )
412
+ selector = "%s" % data .group (2 )
413
+ selector = remove_extra_slashes (selector )
414
+ page_selectors .append (selector )
415
+ comments = data .group (3 )
416
+ command = """%sself.double_click(%s)%s""" % (
417
+ whitespace ,
418
+ selector ,
419
+ comments ,
420
+ )
421
+ if selector_dict :
422
+ if add_comments :
423
+ comments = " # %s" % selector
424
+ selector = optimize_selector (selector )
425
+ if selector in selector_dict .keys ():
426
+ selector_object = selector_dict [selector ]
427
+ changed .append (selector_object .split ("." )[0 ])
428
+ command = """%sself.double_click(%s)%s""" % (
429
+ whitespace ,
430
+ selector_object ,
431
+ comments ,
432
+ )
433
+ if object_dict :
434
+ if not add_comments :
435
+ comments = ""
436
+ object_name = selector
437
+ if object_name in object_dict .keys ():
438
+ selector_object = object_dict [object_name ]
439
+ changed .append (object_name .split ("." )[0 ])
440
+ command = """%sself.double_click(%s)%s""" % (
441
+ whitespace ,
442
+ selector_object ,
443
+ comments ,
444
+ )
445
+ seleniumbase_lines .append (command )
446
+ continue
447
+
390
448
# Handle self.click_visible_elements(SELECTOR)
391
449
if not object_dict :
392
450
data = re .match (
@@ -440,6 +498,112 @@ def process_test_file(
440
498
seleniumbase_lines .append (command )
441
499
continue
442
500
501
+ # Handle self.highlight(SELECTOR)
502
+ if not object_dict :
503
+ data = re .match (
504
+ r"""^(\s*)self\.highlight"""
505
+ r"""\((r?['"][\S\s]+['"])\)([\S\s]*)"""
506
+ r"""$""" ,
507
+ line ,
508
+ )
509
+ else :
510
+ data = re .match (
511
+ r"""^(\s*)self\.highlight"""
512
+ r"""\(([\S]+)\)([\S\s]*)"""
513
+ r"""$""" ,
514
+ line ,
515
+ )
516
+ if data :
517
+ whitespace = data .group (1 )
518
+ selector = "%s" % data .group (2 )
519
+ selector = remove_extra_slashes (selector )
520
+ page_selectors .append (selector )
521
+ comments = data .group (3 )
522
+ command = """%sself.highlight(%s)%s""" % (
523
+ whitespace ,
524
+ selector ,
525
+ comments ,
526
+ )
527
+ if selector_dict :
528
+ if add_comments :
529
+ comments = " # %s" % selector
530
+ selector = optimize_selector (selector )
531
+ if selector in selector_dict .keys ():
532
+ selector_object = selector_dict [selector ]
533
+ changed .append (selector_object .split ("." )[0 ])
534
+ command = """%sself.highlight(%s)%s""" % (
535
+ whitespace ,
536
+ selector_object ,
537
+ comments ,
538
+ )
539
+ if object_dict :
540
+ if not add_comments :
541
+ comments = ""
542
+ object_name = selector
543
+ if object_name in object_dict .keys ():
544
+ selector_object = object_dict [object_name ]
545
+ changed .append (object_name .split ("." )[0 ])
546
+ command = """%sself.highlight(%s)%s""" % (
547
+ whitespace ,
548
+ selector_object ,
549
+ comments ,
550
+ )
551
+ seleniumbase_lines .append (command )
552
+ continue
553
+
554
+ # Handle self.highlight_click(SELECTOR)
555
+ if not object_dict :
556
+ data = re .match (
557
+ r"""^(\s*)self\.highlight_click"""
558
+ r"""\((r?['"][\S\s]+['"])\)([\S\s]*)"""
559
+ r"""$""" ,
560
+ line ,
561
+ )
562
+ else :
563
+ data = re .match (
564
+ r"""^(\s*)self\.highlight_click"""
565
+ r"""\(([\S]+)\)([\S\s]*)"""
566
+ r"""$""" ,
567
+ line ,
568
+ )
569
+ if data :
570
+ whitespace = data .group (1 )
571
+ selector = "%s" % data .group (2 )
572
+ selector = remove_extra_slashes (selector )
573
+ page_selectors .append (selector )
574
+ comments = data .group (3 )
575
+ command = """%sself.highlight_click(%s)%s""" % (
576
+ whitespace ,
577
+ selector ,
578
+ comments ,
579
+ )
580
+ if selector_dict :
581
+ if add_comments :
582
+ comments = " # %s" % selector
583
+ selector = optimize_selector (selector )
584
+ if selector in selector_dict .keys ():
585
+ selector_object = selector_dict [selector ]
586
+ changed .append (selector_object .split ("." )[0 ])
587
+ command = """%sself.highlight_click(%s)%s""" % (
588
+ whitespace ,
589
+ selector_object ,
590
+ comments ,
591
+ )
592
+ if object_dict :
593
+ if not add_comments :
594
+ comments = ""
595
+ object_name = selector
596
+ if object_name in object_dict .keys ():
597
+ selector_object = object_dict [object_name ]
598
+ changed .append (object_name .split ("." )[0 ])
599
+ command = """%sself.highlight_click(%s)%s""" % (
600
+ whitespace ,
601
+ selector_object ,
602
+ comments ,
603
+ )
604
+ seleniumbase_lines .append (command )
605
+ continue
606
+
443
607
# Handle self.switch_to_frame(SELECTOR)
444
608
if not object_dict :
445
609
data = re .match (
@@ -493,6 +657,59 @@ def process_test_file(
493
657
seleniumbase_lines .append (command )
494
658
continue
495
659
660
+ # Handle self.switch_to_frame_of_element(SELECTOR)
661
+ if not object_dict :
662
+ data = re .match (
663
+ r"""^(\s*)self\.switch_to_frame_of_element"""
664
+ r"""\((r?['"][\S\s]+['"])\)([\S\s]*)"""
665
+ r"""$""" ,
666
+ line ,
667
+ )
668
+ else :
669
+ data = re .match (
670
+ r"""^(\s*)self\.switch_to_frame_of_element"""
671
+ r"""\(([\S]+)\)([\S\s]*)"""
672
+ r"""$""" ,
673
+ line ,
674
+ )
675
+ if data :
676
+ whitespace = data .group (1 )
677
+ selector = "%s" % data .group (2 )
678
+ selector = remove_extra_slashes (selector )
679
+ page_selectors .append (selector )
680
+ comments = data .group (3 )
681
+ command = """%sself.switch_to_frame_of_element(%s)%s""" % (
682
+ whitespace ,
683
+ selector ,
684
+ comments ,
685
+ )
686
+ if selector_dict :
687
+ if add_comments :
688
+ comments = " # %s" % selector
689
+ selector = optimize_selector (selector )
690
+ if selector in selector_dict .keys ():
691
+ selector_object = selector_dict [selector ]
692
+ changed .append (selector_object .split ("." )[0 ])
693
+ command = """%sself.switch_to_frame_of_element(%s)%s""" % (
694
+ whitespace ,
695
+ selector_object ,
696
+ comments ,
697
+ )
698
+ if object_dict :
699
+ if not add_comments :
700
+ comments = ""
701
+ object_name = selector
702
+ if object_name in object_dict .keys ():
703
+ selector_object = object_dict [object_name ]
704
+ changed .append (object_name .split ("." )[0 ])
705
+ command = """%sself.switch_to_frame_of_element(%s)%s""" % (
706
+ whitespace ,
707
+ selector_object ,
708
+ comments ,
709
+ )
710
+ seleniumbase_lines .append (command )
711
+ continue
712
+
496
713
# Handle self.assert_element(SELECTOR)
497
714
if not object_dict :
498
715
data = re .match (
@@ -1991,6 +2208,130 @@ def process_test_file(
1991
2208
seleniumbase_lines .append (command )
1992
2209
continue
1993
2210
2211
+ # Handle self.set_attribute(SELECTOR, ATTRIBUTE, VALUE)
2212
+ if not object_dict :
2213
+ data = re .match (
2214
+ r"""^(\s*)self\.set_attribute"""
2215
+ r"""\((r?['"][\S\s]+['"])"""
2216
+ r""",\s?([\S\s]+),\s?([\S\s]+)\)([\S\s]*)"""
2217
+ r"""$""" ,
2218
+ line ,
2219
+ )
2220
+ else :
2221
+ data = re .match (
2222
+ r"""^(\s*)self\.set_attribute"""
2223
+ r"""\(([\S]+),\s?([\S\s]+),\s?([\S\s]+)\)([\S\s]*)"""
2224
+ r"""$""" ,
2225
+ line ,
2226
+ )
2227
+ if data :
2228
+ whitespace = data .group (1 )
2229
+ selector = "%s" % data .group (2 )
2230
+ selector = remove_extra_slashes (selector )
2231
+ page_selectors .append (selector )
2232
+ attribute = data .group (3 )
2233
+ value = data .group (4 )
2234
+ comments = data .group (5 )
2235
+ command = """%sself.set_attribute(%s, %s, %s)%s""" % (
2236
+ whitespace ,
2237
+ selector ,
2238
+ attribute ,
2239
+ value ,
2240
+ comments ,
2241
+ )
2242
+ if selector_dict :
2243
+ if add_comments :
2244
+ comments = " # %s" % selector
2245
+ selector = optimize_selector (selector )
2246
+ if selector in selector_dict .keys ():
2247
+ selector_object = selector_dict [selector ]
2248
+ changed .append (selector_object .split ("." )[0 ])
2249
+ command = """%sself.set_attribute(%s, %s, %s)%s""" % (
2250
+ whitespace ,
2251
+ selector_object ,
2252
+ attribute ,
2253
+ value ,
2254
+ comments ,
2255
+ )
2256
+ if object_dict :
2257
+ if not add_comments :
2258
+ comments = ""
2259
+ object_name = selector
2260
+ if object_name in object_dict .keys ():
2261
+ selector_object = object_dict [object_name ]
2262
+ changed .append (object_name .split ("." )[0 ])
2263
+ command = """%sself.set_attribute(%s, %s, %s)%s""" % (
2264
+ whitespace ,
2265
+ selector_object ,
2266
+ attribute ,
2267
+ value ,
2268
+ comments ,
2269
+ )
2270
+ seleniumbase_lines .append (command )
2271
+ continue
2272
+
2273
+ # Handle self.set_attributes(SELECTOR, ATTRIBUTE, VALUE)
2274
+ if not object_dict :
2275
+ data = re .match (
2276
+ r"""^(\s*)self\.set_attributes"""
2277
+ r"""\((r?['"][\S\s]+['"]),"""
2278
+ r"""\s?([\S\s]+),\s?([\S\s]+)\)([\S\s]*)"""
2279
+ r"""$""" ,
2280
+ line ,
2281
+ )
2282
+ else :
2283
+ data = re .match (
2284
+ r"""^(\s*)self\.set_attributes"""
2285
+ r"""\(([\S]+),\s?([\S\s]+),\s?([\S\s]+)\)([\S\s]*)"""
2286
+ r"""$""" ,
2287
+ line ,
2288
+ )
2289
+ if data :
2290
+ whitespace = data .group (1 )
2291
+ selector = "%s" % data .group (2 )
2292
+ selector = remove_extra_slashes (selector )
2293
+ page_selectors .append (selector )
2294
+ attribute = data .group (3 )
2295
+ value = data .group (4 )
2296
+ comments = data .group (5 )
2297
+ command = """%sself.set_attributes(%s, %s, %s)%s""" % (
2298
+ whitespace ,
2299
+ selector ,
2300
+ attribute ,
2301
+ value ,
2302
+ comments ,
2303
+ )
2304
+ if selector_dict :
2305
+ if add_comments :
2306
+ comments = " # %s" % selector
2307
+ selector = optimize_selector (selector )
2308
+ if selector in selector_dict .keys ():
2309
+ selector_object = selector_dict [selector ]
2310
+ changed .append (selector_object .split ("." )[0 ])
2311
+ command = """%sself.set_attributes(%s, %s, %s)%s""" % (
2312
+ whitespace ,
2313
+ selector_object ,
2314
+ attribute ,
2315
+ value ,
2316
+ comments ,
2317
+ )
2318
+ if object_dict :
2319
+ if not add_comments :
2320
+ comments = ""
2321
+ object_name = selector
2322
+ if object_name in object_dict .keys ():
2323
+ selector_object = object_dict [object_name ]
2324
+ changed .append (object_name .split ("." )[0 ])
2325
+ command = """%sself.set_attributes(%s, %s, %s)%s""" % (
2326
+ whitespace ,
2327
+ selector_object ,
2328
+ attribute ,
2329
+ value ,
2330
+ comments ,
2331
+ )
2332
+ seleniumbase_lines .append (command )
2333
+ continue
2334
+
1994
2335
# Handle VAR = self.get_attribute(SELECTOR, ATTRIBUTE)
1995
2336
if not object_dict :
1996
2337
data = re .match (
0 commit comments