I am trying to select li and click/check on span which is checkbox but, can’t do that.
Here, following I tried.
<div id="list-widget"> <ul class="tree"> <li class="tree-switcher-close"> .... </li> <li class="tree-switcher-close"> <span class="tree-checkbox"> //I want to Click on this <div class="container"> <span class="checkmark"></span> </div> </span> <span title="abc Account"> <span class="tree-title">abc Account</span> </span> </li> <li class="tree-switcher-close"> <span class="tree-checkbox"></span> .... </li> <li class="tree-switcher-close"> <span class="tree-checkbox"></span> .... </li> </ul>
Here, in above code I want to select li where “abc account” and once found want to click on span which have class tree-checkbox. So, I tried.
cy.get('div[id*="list-widget"]') .find('li') .contains('abc Account') .get('.tree-checkbox').click({force: true});
But, it says there are multiple elements found. above code find the li which have contains(‘abc Account’) but, can’t span within that li.
Advertisement
Answer
The main problem is with .get('.tree-checkbox')
. It “forgets” all the preceding path, so you might as well start with cy.get('.tree-checkbox')
and of course that gives multiple elements.
Change that to .find('.tree-checkbox')
.
Also combine li
and abc Account
in one selector, because .contains('abc Account')
by itself takes you to the <span class="tree-title">abc Account</span>
which has no tree-checkbox
.
cy.get('div[id="list-widget"]') .find('li:contains("abc Account")') .find('.tree-checkbox') .click({force:true});
Other variation that works (but is more verbose)
cy.get('div[id*="list-widget"]') .find('li') .contains('abc Account') .parent() .parent() .find(".tree-checkbox") .click({force:true})