Skip to content

Commit 8b53734

Browse files
committed
[rb] update shadow root tests
1 parent 310365e commit 8b53734

File tree

2 files changed

+96
-15
lines changed

2 files changed

+96
-15
lines changed

‎common/src/web/webComponents.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
constructor() {
1313
super();
1414
this.attachShadow({ mode: 'open' }).innerHTML = `
15-
<div><input type="checkbox"/></div>
15+
<div><input type="checkbox"/>
16+
<a href="simpleTest.html">Example Link</a>
17+
</div>
1618
`;
1719
}
1820
});

‎rb/spec/integration/selenium/webdriver/shadow_root_spec.rb

Lines changed: 93 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
module 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

Comments
 (0)