-
Notifications
You must be signed in to change notification settings - Fork 165
Description
Currently Behat doesnt yet support shadow root / shadow doms (and thus mink/sel2driver cant use), so we're a bit stuck
ie, there is no way of me getting to the button as an element (and using anything that we can do with elements) :
<ion-toolbar class="md in-toolbar>
#shadow-root (open)
<ion-button class="in-toolbar">Sign up</ion-button>
#shadow-root (open)
<button type="button">::after</button>
Sign up
</ion-button>
<a href>link</a>
</ion-toolbar>This wouldn't be so bad, if we had a way of returning an element from javascript, since we could do something like:
/**
* @When I debug
*/
public function debug()
{
$driver = self::$driver;
$shardowRoot = $driver->getPage()->find('css', '.md.in-toolbar');
$selDriver = $driver->getDriver();
$wdSession = $selDriver->getWebDriverSession();
if (is_a($shardowRoot, 'Behat\Mink\Element\NodeElement')) {$shardowRoot = $wdSession->element('xpath', $shardowRoot->getXpath());}
$elId = $shardowRoot->getID();
$script = 'return arguments[0].shadowRoot';
$options = array('script' => $script,'args' => array(array('ELEMENT' => "$elId")));
$returned = $wdSession->execute($options); //return $wdSession->execute_async($options);
var_dump($returned);
}However, this returns an array, like:
array(1) { ["shadow-6066-11e4-a52e-4f735466cecf"]=> string(36) "cee43f68-12e0-4d34-aa07-feb2649a107f" }
This seems to be an internal weddriver id of the element, but there is no way of converting this id in to an element (that I can see)
With a Java implementation of selenium, you can cast the returned js result like this:
WebElement returned = (WebElement) driver.executeScript("return arguments[0].shadowRoot", shardowRoot);
But I cant see a way of getting back to the element once retuned from javascript for mink/sel2driver