Skip to content

Commit 91c1840

Browse files
authored
fix: complicated locator (#4170)
1 parent 1c2d957 commit 91c1840

File tree

2 files changed

+139
-17
lines changed

2 files changed

+139
-17
lines changed

lib/locator.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ class Locator {
163163
*/
164164
toXPath(pseudoSelector = '') {
165165
const locator = `${this.value}${pseudoSelector}`;
166-
const limitation = [':nth-of-type', ':first-of-type', ':last-of-type', ':nth-last-child', ':nth-last-of-type', ':checked', ':disabled', ':enabled', ':required', ':lang'];
166+
const limitation = [':nth-of-type', ':first-of-type', ':last-of-type', ':nth-last-child', ':nth-last-of-type', ':checked', ':disabled', ':enabled', ':required', ':lang', ':nth-child'];
167167

168168
if (limitation.some(item => locator.includes(item))) {
169169
cssToXPath = require('css-to-xpath');

test/unit/locator_test.js

Lines changed: 138 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -54,18 +54,142 @@ const xml = `<body>
5454
</div>
5555
<input type="hidden" name="return_url" value="" id="return_url" />
5656
57-
<div class="ps-submenu-root">
58-
<ul class="ps-submenu-root">
59-
<li class="ps-menu-button">Adhemar da Silva</li>
60-
<li class="ps-menu-button">HelloWorld</li>
61-
<li class="ps-menu-button">Hallo</li>
62-
</ul>
63-
<ul class="ps-submenu-root">
64-
<li class="ps-menu-button">Adhemar da Silva</li>
65-
<li class="ps-menu-button">HelloWorld</li>
66-
<li class="ps-menu-button">Authoring</li>
67-
</ul>
68-
</div>
57+
<ul class="css-ewdv3l">
58+
<li class="ps-menuitem-root css-dq4uaz">
59+
<a
60+
aria-current="page"
61+
class="ps-menu-button active"
62+
data-testid="ps-menu-button-test-id"
63+
tabindex="0"
64+
title="aaa"
65+
href="/"
66+
><span class="ps-menu-icon css-2wa2k3"
67+
><i aria-hidden="true" class="icon home lg outline"></i></span
68+
><span class="ps-menu-label css-12w9als">aaa</span></a
69+
>
70+
</li>
71+
<li class="ps-menuitem-root ps-submenu-root css-x7nyah">
72+
<a
73+
class="ps-menu-button"
74+
data-testid="ps-menu-button-test-id"
75+
title="Dashboard"
76+
tabindex="0"
77+
><span class="ps-menu-icon css-2wa2k3"
78+
><i
79+
aria-hidden="true"
80+
class="icon tachometer alternate"
81+
></i></span
82+
><span class="ps-menu-label css-12w9als">aaa</span
83+
><span class="ps-submenu-expand-icon css-1cuxlhl"
84+
><span class="css-honxw6"></span></span
85+
></a>
86+
</li>
87+
<li class="ps-menuitem-root ps-submenu-root css-x7nyah">
88+
<a
89+
class="ps-menu-button"
90+
data-testid="ps-menu-button-test-id"
91+
title="aaa"
92+
tabindex="0"
93+
><span class="ps-menu-icon css-2wa2k3"
94+
><i aria-hidden="true" class="icon books"></i></span
95+
><span class="ps-menu-label css-12w9als">Authoring</span
96+
><span class="ps-submenu-expand-icon css-1cuxlhl"
97+
><span class="css-honxw6"></span></span
98+
></a>
99+
</li>
100+
<li class="ps-menuitem-root ps-submenu-root css-x7nyah">
101+
<a
102+
class="ps-menu-button"
103+
data-testid="ps-menu-button-test-id"
104+
title="aaa"
105+
tabindex="0"
106+
><span class="ps-menu-icon css-2wa2k3"
107+
><i aria-hidden="true" class="icon ballot check"></i></span
108+
><span class="ps-menu-label css-12w9als">aaa</span
109+
><span class="ps-submenu-expand-icon css-1cuxlhl"
110+
><span class="css-honxw6"></span></span
111+
></a>
112+
</li>
113+
<li class="ps-menuitem-root ps-submenu-root css-x7nyah">
114+
<a
115+
class="ps-menu-button"
116+
data-testid="ps-menu-button-test-id"
117+
title="aaa"
118+
tabindex="0"
119+
><span class="ps-menu-icon css-2wa2k3"
120+
><i aria-hidden="true" class="icon book reader"></i></span
121+
><span class="ps-menu-label css-12w9als">aaa</span
122+
><span class="ps-submenu-expand-icon css-1cuxlhl"
123+
><span class="css-honxw6"></span></span
124+
></a>
125+
</li>
126+
<li class="ps-menuitem-root ps-submenu-root css-x7nyah">
127+
<a
128+
class="ps-menu-button"
129+
data-testid="ps-menu-button-test-id"
130+
title="aaa"
131+
tabindex="0"
132+
><span class="ps-menu-icon css-2wa2k3"
133+
><i aria-hidden="true" class="icon school"></i></span
134+
><span class="ps-menu-label css-12w9als">aaa</span
135+
><span class="ps-submenu-expand-icon css-1cuxlhl"
136+
><span class="css-honxw6"></span></span
137+
></a>
138+
</li>
139+
<li class="ps-menuitem-root ps-submenu-root css-x7nyah">
140+
<a
141+
class="ps-menu-button"
142+
data-testid="ps-menu-button-test-id"
143+
title="aaa"
144+
tabindex="0"
145+
><span class="ps-menu-icon css-2wa2k3"
146+
><i aria-hidden="true" class="icon user"></i></span
147+
><span class="ps-menu-label css-12w9als">aaa</span
148+
><span class="ps-submenu-expand-icon css-1cuxlhl"
149+
><span class="css-honxw6"></span></span
150+
></a>
151+
</li>
152+
<li class="ps-menuitem-root ps-submenu-root css-x7nyah">
153+
<a
154+
class="ps-menu-button"
155+
data-testid="ps-menu-button-test-id"
156+
title="aaa"
157+
tabindex="0"
158+
><span class="ps-menu-icon css-2wa2k3"
159+
><i aria-hidden="true" class="icon cog"></i></span
160+
><span class="ps-menu-label css-12w9als">aaa</span
161+
><span class="ps-submenu-expand-icon css-1cuxlhl"
162+
><span class="css-honxw6"></span></span
163+
></a>
164+
</li>
165+
<li class="ps-menuitem-root ps-submenu-root css-x7nyah">
166+
<a
167+
class="ps-menu-button"
168+
data-testid="ps-menu-button-test-id"
169+
title="aaa"
170+
tabindex="0"
171+
><span class="ps-menu-icon css-2wa2k3"
172+
><i aria-hidden="true" class="icon tablet alternate"></i></span
173+
><span class="ps-menu-label css-12w9als">aaa</span
174+
><span class="ps-submenu-expand-icon css-1cuxlhl"
175+
><span class="css-honxw6"></span></span
176+
></a>
177+
</li>
178+
<li class="ps-menuitem-root ps-submenu-root css-x7nyah">
179+
<a
180+
class="ps-menu-button"
181+
data-testid="ps-menu-button-test-id"
182+
title="aaa"
183+
tabindex="0"
184+
><span class="ps-menu-icon css-2wa2k3"
185+
><i aria-hidden="true" class="icon tools"></i></span
186+
><span class="ps-menu-label css-12w9als">aaa</span
187+
><span class="ps-submenu-expand-icon css-1cuxlhl"
188+
><span class="css-honxw6"></span></span
189+
></a>
190+
</li>
191+
</ul>
192+
69193
</body>`;
70194

71195
describe('Locator', () => {
@@ -294,13 +418,11 @@ describe('Locator', () => {
294418
});
295419

296420
it('should be able to locate complicated locator', () => {
297-
const l = Locator.build('.ps-menu-button')
298-
.withText('Authoring')
299-
.inside('.ps-submenu-root:nth-child(2)');
421+
const l = Locator.build('.ps-menu-button').withText('Authoring').inside('.ps-submenu-root:nth-child(3)');
300422

301423
const nodes = xpath.select(l.toXPath(), doc);
302424
expect(nodes).to.have.length(1, l.toXPath());
303-
expect(nodes[0].firstChild.data).to.eql('Authoring', l.toXPath());
425+
expect(nodes[0].firstChild.nextSibling.firstChild.data).to.eql('Authoring', l.toXPath());
304426
});
305427

306428
it('should find element with last of type with text', () => {

0 commit comments

Comments
 (0)