Skip to content

Commit

Permalink
ENH Allow clicking on text directly in an element
Browse files Browse the repository at this point in the history
This resolves situations where the text in a child element gets confused
with text in the element we want to click and results in errors finding
the correct element.
  • Loading branch information
GuySartorelli committed Nov 21, 2024
1 parent 97f5092 commit 4db499a
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions src/Context/BasicContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -496,12 +496,12 @@ public function iClickOnTheElementConfirmingTheDialog($selector)
}

/**
* @Given /^I (click|double click) "([^"]*)" in the "([^"]*)" element$/
* @Given /^I (click|double click) "([^"]*)"(| directly) in the "([^"]*)" element$/
* @param string $clickType
* @param string $text
* @param string $selector
*/
public function iClickInTheElement($clickType, $text, $selector)
public function iClickInTheElement($clickType, $text, $directly, $selector)
{
$clickTypeMap = array(
"double click" => "doubleclick",
Expand All @@ -510,7 +510,13 @@ public function iClickInTheElement($clickType, $text, $selector)
$page = $this->getSession()->getPage();
$parentElement = $page->find('css', $selector);
Assert::assertNotNull($parentElement, sprintf('"%s" element not found', $selector));
$element = $parentElement->find('xpath', sprintf('//*[count(*)=0 and contains(.,"%s")]', $text));
if ($directly) {
// Finds the specific text within the selector element (to validate it's there), and then grabs the element that holds the text
$element = $parentElement->find('xpath', sprintf('/text()[contains(.,"%s")]/..', $text));
} else {
// Finds a child of the selector element which contains the text
$element = $parentElement->find('xpath', sprintf('//*[count(*)=0 and contains(.,"%s")]', $text));
}
Assert::assertNotNull($element, sprintf('"%s" not found', $text));
$clickTypeFn = $clickTypeMap[$clickType];
$element->$clickTypeFn();
Expand Down

0 comments on commit 4db499a

Please sign in to comment.