@@ -269,7 +269,7 @@ def screenshot
269
269
end
270
270
271
271
def element_screenshot ( element )
272
- execute :take_element_screenshot , id : element . ref
272
+ execute :take_element_screenshot , id : element
273
273
end
274
274
275
275
#
@@ -431,7 +431,7 @@ def clear_element(element)
431
431
end
432
432
433
433
def submit_element ( element )
434
- form = find_element_by ( 'xpath' , "./ancestor-or-self::form" , element )
434
+ form = find_element_by ( 'xpath' , "./ancestor-or-self::form" , [ : element, element ] )
435
435
execute_script ( "var e = arguments[0].ownerDocument.createEvent('Event');" \
436
436
"e.initEvent('submit', true, true);" \
437
437
'if (arguments[0].dispatchEvent(e)) { arguments[0].submit() }' , form . as_json )
@@ -451,19 +451,19 @@ def element_attribute(element, name)
451
451
end
452
452
453
453
def element_dom_attribute ( element , name )
454
- execute :get_element_attribute , id : element . ref , name : name
454
+ execute :get_element_attribute , id : element , name : name
455
455
end
456
456
457
457
def element_property ( element , name )
458
- execute :get_element_property , id : element . ref , name : name
458
+ execute :get_element_property , id : element , name : name
459
459
end
460
460
461
461
def element_aria_role ( element )
462
- execute :get_element_aria_role , id : element . ref
462
+ execute :get_element_aria_role , id : element
463
463
end
464
464
465
465
def element_aria_label ( element )
466
- execute :get_element_aria_label , id : element . ref
466
+ execute :get_element_aria_label , id : element
467
467
end
468
468
469
469
def element_value ( element )
@@ -524,34 +524,47 @@ def active_element
524
524
525
525
alias_method :switch_to_active_element , :active_element
526
526
527
- def find_element_by ( how , what , parent = nil )
527
+ def find_element_by ( how , what , parent_ref = [ ] )
528
528
how , what = convert_locator ( how , what )
529
529
530
530
return execute_atom ( :findElements , Support ::RelativeLocator . new ( what ) . as_json ) . first if how == 'relative'
531
531
532
- id = if parent
533
- execute :find_child_element , { id : parent } , { using : how , value : what . to_s }
532
+ parent_type , parent_id = parent_ref
533
+ id = case parent_type
534
+ when :element
535
+ execute :find_child_element , { id : parent_id } , { using : how , value : what . to_s }
536
+ when :shadow_root
537
+ execute :find_shadow_child_element , { id : parent_id } , { using : how , value : what . to_s }
534
538
else
535
539
execute :find_element , { } , { using : how , value : what . to_s }
536
540
end
537
541
538
542
Element . new self , element_id_from ( id )
539
543
end
540
544
541
- def find_elements_by ( how , what , parent = nil )
545
+ def find_elements_by ( how , what , parent_ref = [ ] )
542
546
how , what = convert_locator ( how , what )
543
547
544
548
return execute_atom :findElements , Support ::RelativeLocator . new ( what ) . as_json if how == 'relative'
545
549
546
- ids = if parent
547
- execute :find_child_elements , { id : parent } , { using : how , value : what . to_s }
550
+ parent_type , parent_id = parent_ref
551
+ ids = case parent_type
552
+ when :element
553
+ execute :find_child_elements , { id : parent_id } , { using : how , value : what . to_s }
554
+ when :shadow_root
555
+ execute :find_shadow_child_elements , { id : parent_id } , { using : how , value : what . to_s }
548
556
else
549
557
execute :find_elements , { } , { using : how , value : what . to_s }
550
558
end
551
559
552
560
ids . map { |id | Element . new self , element_id_from ( id ) }
553
561
end
554
562
563
+ def shadow_root ( element )
564
+ id = execute :get_element_shadow_root , id : element
565
+ ShadowRoot . new self , shadow_root_id_from ( id )
566
+ end
567
+
555
568
private
556
569
557
570
#
@@ -599,7 +612,11 @@ def unwrap_script_result(arg)
599
612
end
600
613
601
614
def element_id_from ( id )
602
- id [ 'ELEMENT' ] || id [ 'element-6066-11e4-a52e-4f735466cecf' ]
615
+ id [ 'ELEMENT' ] || id [ Element ::ELEMENT_KEY ]
616
+ end
617
+
618
+ def shadow_root_id_from ( id )
619
+ id [ ShadowRoot ::ROOT_KEY ]
603
620
end
604
621
605
622
def prepare_capabilities_payload ( capabilities )
0 commit comments