Skip to content

no way convert to element from javascript (so we can write our own methods that are not yet supported, for example shadow doms) #346

@botmike

Description

@botmike

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions