mirror of
https://github.com/silverstripe/silverstripe-behat-extension
synced 2024-10-22 17:05:32 +02:00
Merge pull request #51 from silverstripe-labs/pulls/table
Step definitions for table interactions
This commit is contained in:
commit
2dbd92b16b
12
README.md
12
README.md
@ -470,6 +470,12 @@ It's based on the `vendor/bin/behat -di @cms` output.
|
|||||||
|
|
||||||
Given /^I wait (?:for )?([\d\.]+) second(?:s?)$/
|
Given /^I wait (?:for )?([\d\.]+) second(?:s?)$/
|
||||||
|
|
||||||
|
Then /^the "([^"]*)" table should contain "([^"]*)"$/
|
||||||
|
|
||||||
|
Then /^the "([^"]*)" table should not contain "([^"]*)"$/
|
||||||
|
|
||||||
|
Given /^I click on "([^"]*)" in the "([^"]*)" table$/
|
||||||
|
|
||||||
### Navigation
|
### Navigation
|
||||||
|
|
||||||
Given /^(?:|I )am on homepage$/
|
Given /^(?:|I )am on homepage$/
|
||||||
@ -610,12 +616,6 @@ It's based on the `vendor/bin/behat -di @cms` output.
|
|||||||
|
|
||||||
When /^I click the "([^"]*)" CMS tab$/
|
When /^I click the "([^"]*)" CMS tab$/
|
||||||
|
|
||||||
Then /^the "([^"]*)" table should contain "([^"]*)"$/
|
|
||||||
|
|
||||||
Then /^the "([^"]*)" table should not contain "([^"]*)"$/
|
|
||||||
|
|
||||||
Given /^I click on "([^"]*)" in the "([^"]*)" table$/
|
|
||||||
|
|
||||||
Then /^I can see the preview panel$/
|
Then /^I can see the preview panel$/
|
||||||
|
|
||||||
Given /^the preview contains "([^"]*)"$/
|
Given /^the preview contains "([^"]*)"$/
|
||||||
|
@ -676,4 +676,78 @@ JS;
|
|||||||
$session->getDriver()->click($radioButton->getXPath());
|
$session->getDriver()->click($radioButton->getXPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then /^the "([^"]*)" table should contain "([^"]*)"$/
|
||||||
|
*/
|
||||||
|
public function theTableShouldContain($selector, $text) {
|
||||||
|
$table = $this->getTable($selector);
|
||||||
|
|
||||||
|
$element = $table->find('named', array('content', "'$text'"));
|
||||||
|
assertNotNull($element, sprintf('Element containing `%s` not found in `%s` table', $text, $selector));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then /^the "([^"]*)" table should not contain "([^"]*)"$/
|
||||||
|
*/
|
||||||
|
public function theTableShouldNotContain($selector, $text) {
|
||||||
|
$table = $this->getTable($selector);
|
||||||
|
|
||||||
|
$element = $table->find('named', array('content', "'$text'"));
|
||||||
|
assertNull($element, sprintf('Element containing `%s` not found in `%s` table', $text, $selector));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Given /^I click on "([^"]*)" in the "([^"]*)" table$/
|
||||||
|
*/
|
||||||
|
public function iClickOnInTheTable($text, $selector) {
|
||||||
|
$table = $this->getTable($selector);
|
||||||
|
|
||||||
|
$element = $table->find('xpath', sprintf('//*[count(*)=0 and contains(.,"%s")]', $text));
|
||||||
|
assertNotNull($element, sprintf('Element containing `%s` not found', $text));
|
||||||
|
$element->click();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the first visible table by various factors:
|
||||||
|
* - table[id]
|
||||||
|
* - table[title]
|
||||||
|
* - table *[class=title]
|
||||||
|
* - fieldset[data-name] table
|
||||||
|
* - table caption
|
||||||
|
*
|
||||||
|
* @return Behat\Mink\Element\NodeElement
|
||||||
|
*/
|
||||||
|
protected function getTable($selector) {
|
||||||
|
$selector = $this->getSession()->getSelectorsHandler()->xpathLiteral($selector);
|
||||||
|
$page = $this->getSession()->getPage();
|
||||||
|
$candidates = $page->findAll(
|
||||||
|
'xpath',
|
||||||
|
$this->getSession()->getSelectorsHandler()->selectorToXpath(
|
||||||
|
"xpath", ".//table[(./@id = $selector or contains(./@title, $selector))]"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Find tables by a <caption> field
|
||||||
|
$candidates += $page->findAll('xpath', "//table//caption[contains(normalize-space(string(.)), $selector)]/ancestor-or-self::table[1]");
|
||||||
|
|
||||||
|
// Find tables by a .title node
|
||||||
|
$candidates += $page->findAll('xpath', "//table//*[@class='title' and contains(normalize-space(string(.)), $selector)]/ancestor-or-self::table[1]");
|
||||||
|
|
||||||
|
// Some tables don't have a visible title, so look for a fieldset with data-name instead
|
||||||
|
$candidates += $page->findAll('xpath', "//fieldset[@data-name=$selector]//table");
|
||||||
|
|
||||||
|
assertTrue((bool)$candidates, 'Could not find any table elements');
|
||||||
|
|
||||||
|
$table = null;
|
||||||
|
foreach($candidates as $candidate) {
|
||||||
|
if(!$table && $candidate->isVisible()) {
|
||||||
|
$table = $candidate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assertTrue((bool)$table, 'Found table elements, but none are visible');
|
||||||
|
|
||||||
|
return $table;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user