Skip to content

Commit 4f8b8b2

Browse files
committed
chromedriver atoms: Fixed isElementClickable when button was a top-level component in a shadow DOM.
1 parent 3bbdedb commit 4f8b8b2

File tree

2 files changed

+49
-31
lines changed

2 files changed

+49
-31
lines changed

javascript/chrome-driver/atoms.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,16 @@ webdriver.chrome.scrollIntoView_ = function(elem, region, center) {
118118
scrollable.scrollTop += scroll.y;
119119
}
120120

121+
function getContainer(elem) {
122+
var container = elem.parentNode;
123+
if (SHADOW_DOM_ENABLED && (container instanceof ShadowRoot)) {
124+
container = elem.host;
125+
}
126+
return container;
127+
}
128+
121129
var doc = goog.dom.getOwnerDocument(elem);
122-
var container = elem.parentNode;
130+
var container = getContainer(elem);
123131
var offset;
124132
while (container &&
125133
container != doc.documentElement &&
@@ -129,10 +137,7 @@ webdriver.chrome.scrollIntoView_ = function(elem, region, center) {
129137
var containerSize = new goog.math.Size(container.clientWidth,
130138
container.clientHeight);
131139
scrollHelper(container, containerSize, offset, region, center);
132-
container = container.parentNode;
133-
if (SHADOW_DOM_ENABLED && (container instanceof ShadowRoot)) {
134-
container = container.host;
135-
}
140+
container = getContainer(container);
136141
}
137142

138143
offset = goog.style.getClientPosition(elem);

javascript/chrome-driver/test/shadow_dom_test.html

Lines changed: 39 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -27,42 +27,44 @@ <H1>Page for Shadow DOM chromedriver tests</H1>
2727
</div>
2828

2929
<template id="parentTemplate">
30-
<div id="parentDiv">
30+
<div id="parentDiv">
3131
<div style="border-style:solid;border-color:green">
32-
<H3>Parent</H3>
33-
<H4>Contents</H4>
34-
<content></content>
32+
<H3>Parent</H3>
33+
<H4>Contents</H4>
34+
<content></content>
3535
</div>
36-
</div>
36+
</div>
3737
</template>
3838
<template id="olderChildTemplate">
39-
<div id="olderChildDiv">
39+
<div id="olderChildDiv">
4040
<div style="border-style:solid;border-color:red">
41-
<H3 id="olderHeading">Older Child</H3>
42-
As the older child of a nested shadow root, this is the most likely
43-
to go wrong bit of the page, so we'll concentrate our tests here.
44-
<H4>Contents</H4>
45-
<content></content>
46-
<input id="olderTextBox" type="text" value="foo"/>
47-
<input type="button" onClick="buttonWasClicked()" value="button"
48-
id="olderButton"/>
41+
<H3 id="olderHeading">Older Child</H3>
42+
As the older child of a nested shadow root, this is the most likely
43+
to go wrong bit of the page, so we'll concentrate our tests here.
44+
<H4>Contents</H4>
45+
<content></content>
46+
<input id="olderTextBox" type="text" value="foo"/>
47+
<input type="button" onClick="buttonWasClicked()" value="button"
48+
id="olderButton"/>
4949
</div>
50-
</div>
50+
</div>
5151
</template>
5252
<template id="youngerChildTemplate">
53-
<div id="youngerChildDiv">
53+
<input type="button" onClick="buttonWasClicked()" value="button"
54+
id="youngerButton"/>
55+
<div id="youngerChildDiv">
5456
<div style="border-style:solid;border-color:blue">
55-
<H3>Younger Child</H3>
56-
<div style="border-style:dotted;border-color:blue">
57-
<H4>Younger Child Contents</H4>
58-
<content></content>
59-
</div>
60-
<div style="border-style:dashed;border-color:blue">
61-
<H4>Younger Child Shadow</H4>
62-
<shadow></shadow>
63-
</div>
57+
<H3>Younger Child</H3>
58+
<div style="border-style:dotted;border-color:blue">
59+
<H4>Younger Child Contents</H4>
60+
<content></content>
61+
</div>
62+
<div style="border-style:dashed;border-color:blue">
63+
<H4>Younger Child Shadow</H4>
64+
<shadow></shadow>
65+
</div>
6466
</div>
65-
</div>
67+
</div>
6668
</template>
6769
<script type="text/javascript" >
6870
var parentShadowRoot = document.querySelector('#innerDiv').createShadowRoot();
@@ -108,6 +110,17 @@ <H4>Younger Child Shadow</H4>
108110
getCenterCoordinate(elemButton)).clickable);
109111
}
110112

113+
function testShadowRootTopLevelComponentIsElementClickable() {
114+
// Regression test: check things also work on buttons that are top-level
115+
// components of a shadow DOM
116+
var elemButton = document.querySelector("* /deep/ #youngerButton");
117+
webdriver.chrome.getLocationInView(elemButton, true);
118+
assertTrue(
119+
"Button #youngerButton should be clickable",
120+
webdriver.chrome.isElementClickable(elemButton,
121+
getCenterCoordinate(elemButton)).clickable);
122+
}
123+
111124
function testShadowRootIsDisplayed() {
112125
// check isDisplayed works as expected on elements within a shadow
113126
// DOM

0 commit comments

Comments
 (0)