21
21
22
22
module Selenium
23
23
module WebDriver
24
- describe ShadowRoot , only : { browser : : chrome} do
24
+ describe ShadowRoot , only : { browser : %i[ chrome firefox edge ] } do
25
25
before { driver . navigate . to url_for ( 'webComponents.html' ) }
26
26
27
27
let ( :custom_element ) { driver . find_element ( css : 'custom-checkbox-element' ) }
@@ -37,30 +37,109 @@ module WebDriver
37
37
expect { div . shadow_root } . to raise_error ( Error ::NoSuchShadowRootError )
38
38
end
39
39
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
41
42
shadow_root = custom_element . shadow_root
42
43
execute_shadow_root = driver . execute_script ( 'return arguments[0].shadowRoot;' , custom_element )
43
44
expect ( execute_shadow_root ) . to eq shadow_root
44
45
end
45
46
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' )
49
52
50
- expect ( element ) . to be_a Element
51
- end
53
+ expect ( element ) . to be_a Element
54
+ end
52
55
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
56
88
57
- expect ( elements . size ) . to eq 1
89
+ expect { shadow_root . find_element ( css : 'no' ) } . to raise_error ( Error ::NoSuchElementError )
90
+ end
58
91
end
59
92
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
62
139
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
64
143
end
65
144
end
66
145
end # WebDriver
0 commit comments