mirror of
https://github.com/silverstripe/silverstripe-behat-extension
synced 2024-10-22 17:05:32 +02:00
Merge branch '4.11' into 4
This commit is contained in:
commit
0d3e4a91cb
@ -545,6 +545,17 @@ JS;
|
|||||||
$this->iDismissTheDialog();
|
$this->iDismissTheDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then /^the "([^"]+)" element "([^"]+)" attribute should be "([^"]*)"$/
|
||||||
|
*/
|
||||||
|
public function theElementAttributeShouldBe($selector, $attribute, $value)
|
||||||
|
{
|
||||||
|
$page = $this->getSession()->getPage();
|
||||||
|
$element = $page->find('css', $selector);
|
||||||
|
Assert::assertNotNull($element, sprintf('Element %s not found', $selector));
|
||||||
|
Assert::assertEquals($value, $element->getAttribute($attribute));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Given /^I see the text "([^"]+)" in the alert$/
|
* @Given /^I see the text "([^"]+)" in the alert$/
|
||||||
* @param string $expected
|
* @param string $expected
|
||||||
|
@ -30,6 +30,7 @@ use SilverStripe\Security\Group;
|
|||||||
use SilverStripe\Security\Member;
|
use SilverStripe\Security\Member;
|
||||||
use SilverStripe\Security\Permission;
|
use SilverStripe\Security\Permission;
|
||||||
use SilverStripe\Versioned\Versioned;
|
use SilverStripe\Versioned\Versioned;
|
||||||
|
use SilverStripe\Core\Config\Config;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Context used to create fixtures in the SilverStripe ORM.
|
* Context used to create fixtures in the SilverStripe ORM.
|
||||||
@ -659,7 +660,16 @@ class FixtureContext implements Context
|
|||||||
|
|
||||||
// Add the extension to the CLI context
|
// Add the extension to the CLI context
|
||||||
/** @var Extensible $targetClass */
|
/** @var Extensible $targetClass */
|
||||||
$targetClass = $this->convertTypeToClass($class);
|
try {
|
||||||
|
$targetClass = $this->convertTypeToClass($class);
|
||||||
|
} catch (InvalidArgumentException $e) {
|
||||||
|
// will end up here if the class is not a subclass of DataObject
|
||||||
|
if (class_exists($class)) {
|
||||||
|
$targetClass = $class;
|
||||||
|
} else {
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
$targetClass::add_extension($extension);
|
$targetClass::add_extension($extension);
|
||||||
|
|
||||||
// Write config for this extension too...
|
// Write config for this extension too...
|
||||||
@ -885,6 +895,70 @@ YAML;
|
|||||||
return Injector::inst()->get(AssetStore::class);
|
return Injector::inst()->get(AssetStore::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Selects the first match of $select in the given HTML editor (tinymce)
|
||||||
|
*/
|
||||||
|
protected function selectInTheHtmlField(string $select, string $field)
|
||||||
|
{
|
||||||
|
$inputField = $this->getHtmlField($field);
|
||||||
|
$inputField->getParent()->find('css', 'iframe')->click();
|
||||||
|
$inputFieldId = $inputField->getAttribute('id');
|
||||||
|
$js = <<<JS
|
||||||
|
var editor = jQuery('#$inputFieldId').entwine('ss').getEditor(),
|
||||||
|
doc = editor.getInstance().getDoc(),
|
||||||
|
sel = doc.getSelection(),
|
||||||
|
rng = new Range(),
|
||||||
|
matched = false;
|
||||||
|
|
||||||
|
jQuery(doc).find("$select").each(function() {
|
||||||
|
if(!matched) {
|
||||||
|
rng.selectNode(this);
|
||||||
|
sel.removeAllRanges();
|
||||||
|
sel.addRange(rng);
|
||||||
|
matched = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
JS;
|
||||||
|
$this->getMainContext()->getSession()->executeScript($js);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Selects the first image match in the HTML editor (tinymce)
|
||||||
|
*
|
||||||
|
* @When /^I select the image "([^"]+)" in the "([^"]+)" HTML field$/
|
||||||
|
* @param string $filename
|
||||||
|
* @param string $field
|
||||||
|
*/
|
||||||
|
public function iSelectTheImageInHtmlField($filename, $field)
|
||||||
|
{
|
||||||
|
$this->selectInTheHtmlField("img[src*='$filename']", $field);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Locate an HTML editor field
|
||||||
|
*
|
||||||
|
* @param string $locator Raw html field identifier as passed from
|
||||||
|
* @return NodeElement
|
||||||
|
*/
|
||||||
|
protected function getHtmlField($locator)
|
||||||
|
{
|
||||||
|
$locator = str_replace('\\"', '"', $locator ?? '');
|
||||||
|
$page = $this->getMainContext()->getSession()->getPage();
|
||||||
|
$element = $page->find('css', 'textarea.htmleditor[name=\'' . $locator . '\']');
|
||||||
|
if ($element) {
|
||||||
|
return $element;
|
||||||
|
}
|
||||||
|
$label = $page->findAll('xpath', sprintf('//label[contains(text(), \'%s\')]', $locator));
|
||||||
|
if (!empty($label)) {
|
||||||
|
Assert::assertCount(1, $label, "Found more than one element containing the phrase \"$locator\"");
|
||||||
|
$label = array_shift($label);
|
||||||
|
$fieldId = $label->getAttribute('for');
|
||||||
|
$element = $page->find('css', '#' . $fieldId);
|
||||||
|
}
|
||||||
|
Assert::assertNotNull($element, sprintf('HTML field "%s" not found', $locator));
|
||||||
|
return $element;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a natural language class description to an actual class name.
|
* Converts a natural language class description to an actual class name.
|
||||||
* Respects {@link DataObject::$singular_name} variations.
|
* Respects {@link DataObject::$singular_name} variations.
|
||||||
|
Loading…
Reference in New Issue
Block a user