2121
2222module Selenium
2323 module WebDriver
24- describe ShadowRoot , only : { browser : : chrome} do
24+ describe ShadowRoot , only : { browser : %i[ chrome firefox edge ] } do
2525 before { driver . navigate . to url_for ( 'webComponents.html' ) }
2626
2727 let ( :custom_element ) { driver . find_element ( css : 'custom-checkbox-element' ) }
@@ -37,30 +37,109 @@ module WebDriver
3737 expect { div . shadow_root } . to raise_error ( Error ::NoSuchShadowRootError )
3838 end
3939
40- it 'gets shadow root from execute script' do
40+ it 'gets shadow root from script' , except : { browser : :firefox ,
41+ reason : 'https://github.com/mozilla/geckodriver/issues/2006' } do
4142 shadow_root = custom_element . shadow_root
4243 execute_shadow_root = driver . execute_script ( 'return arguments[0].shadowRoot;' , custom_element )
4344 expect ( execute_shadow_root ) . to eq shadow_root
4445 end
4546
46- it 'finds element from shadow root' do
47- shadow_root = custom_element . shadow_root
48- element = shadow_root . find_element ( css : 'input' )
47+ describe '#find_element' , except : { browser : :firefox ,
48+ reason : 'https://github.com/mozilla/geckodriver/issues/2005' } do
49+ it 'by css' do
50+ shadow_root = custom_element . shadow_root
51+ element = shadow_root . find_element ( css : 'input' )
4952
50- expect ( element ) . to be_a Element
51- end
53+ expect ( element ) . to be_a Element
54+ end
5255
53- it 'finds elements from shadow root' do
54- shadow_root = custom_element . shadow_root
55- elements = shadow_root . find_elements ( css : 'input' )
56+ it 'by xpath' , except : { browser : %i[ chrome edge ] ,
57+ reason : 'https://bugs.chromium.org/p/chromedriver/issues/detail?id=4097' } do
58+ shadow_root = custom_element . shadow_root
59+ element = shadow_root . find_element ( xpath : "//input[type='checkbox']" )
60+
61+ expect ( element ) . to be_a Element
62+ end
63+
64+ it 'by link text' do
65+ shadow_root = custom_element . shadow_root
66+ element = shadow_root . find_element ( link_text : 'Example Link' )
67+
68+ expect ( element ) . to be_a Element
69+ end
70+
71+ it 'by partial link text' do
72+ shadow_root = custom_element . shadow_root
73+ element = shadow_root . find_element ( partial_link_text : 'Link' )
74+
75+ expect ( element ) . to be_a Element
76+ end
77+
78+ it 'by tag name' , except : { browser : %i[ chrome edge ] ,
79+ reason : 'https://bugs.chromium.org/p/chromedriver/issues/detail?id=4097' } do
80+ shadow_root = custom_element . shadow_root
81+ element = shadow_root . find_element ( tag_name : 'input' )
82+
83+ expect ( element ) . to be_a Element
84+ end
85+
86+ it 'raises error if not found' do
87+ shadow_root = custom_element . shadow_root
5688
57- expect ( elements . size ) . to eq 1
89+ expect { shadow_root . find_element ( css : 'no' ) } . to raise_error ( Error ::NoSuchElementError )
90+ end
5891 end
5992
60- it 'raises error if no element in shadow root' do
61- shadow_root = custom_element . shadow_root
93+ describe '#find_elements' , except : { browser : :firefox ,
94+ reason : 'https://github.com/mozilla/geckodriver/issues/2005' } do
95+ it 'by css' do
96+ shadow_root = custom_element . shadow_root
97+ elements = shadow_root . find_elements ( css : 'input' )
98+
99+ expect ( elements . size ) . to eq 1
100+ expect ( elements . first ) . to be_a Element
101+ end
102+
103+ it 'by xpath' , except : { browser : %i[ chrome edge ] ,
104+ reason : 'https://bugs.chromium.org/p/chromedriver/issues/detail?id=4097' } do
105+ shadow_root = custom_element . shadow_root
106+ elements = shadow_root . find_elements ( xpath : "//input[type='checkbox']" )
107+
108+ expect ( elements . size ) . to eq 1
109+ expect ( elements . first ) . to be_a Element
110+ end
111+
112+ it 'by link text' do
113+ shadow_root = custom_element . shadow_root
114+ elements = shadow_root . find_elements ( link_text : 'Example Link' )
115+
116+ expect ( elements . size ) . to eq 1
117+ expect ( elements . first ) . to be_a Element
118+ end
119+
120+ it 'by partial link text' do
121+ shadow_root = custom_element . shadow_root
122+ elements = shadow_root . find_elements ( partial_link_text : 'Link' )
123+
124+ expect ( elements . size ) . to eq 1
125+ expect ( elements . first ) . to be_a Element
126+ end
127+
128+ it 'by tag name' , except : { browser : %i[ chrome edge ] ,
129+ reason : 'https://bugs.chromium.org/p/chromedriver/issues/detail?id=4097' } do
130+ shadow_root = custom_element . shadow_root
131+ elements = shadow_root . find_elements ( tag_name : 'input' )
132+
133+ expect ( elements . size ) . to eq 1
134+ expect ( elements . first ) . to be_a Element
135+ end
136+
137+ it 'is empty when not found' do
138+ shadow_root = custom_element . shadow_root
62139
63- expect { shadow_root . find_element ( css : 'no' ) } . to raise_error ( Error ::NoSuchElementError )
140+ elements = shadow_root . find_elements ( css : 'no' )
141+ expect ( elements . size ) . to eq 0
142+ end
64143 end
65144 end
66145 end # WebDriver
0 commit comments