我想測試一個網站,它有一個動態菜單結構。我想遍歷所有菜單項並在每個頁面上運行同一系列的測試。我們正在談論超過100頁改變reguraly的頁面。每個元素與behat或codeception
我想用behat或codeception來做到這一點。
有沒有人有關於如何做到這一點的想法?
我想測試一個網站,它有一個動態菜單結構。我想遍歷所有菜單項並在每個頁面上運行同一系列的測試。我們正在談論超過100頁改變reguraly的頁面。每個元素與behat或codeception
我想用behat或codeception來做到這一點。
有沒有人有關於如何做到這一點的想法?
當使用貝哈特與水貂,你可以抓住用的findAll您的菜單項(),然後遍歷它:
/**
* @When /^I run my test series for all menu items$/
*/
public function iRunMyTestSeriesForAllMenuItems() {
$result = TRUE;
$this->getSession()->visit('http://www.example.com/');
$links = $this->getSession()->getPage()->findAll('css', '#menu ul li a');
foreach ($links as $link) {
$url = $link->getAttribute('href');
if (FALSE === $this->yourTestHere($url)) {
$result = FALSE;
}
}
return $result;
}
我有,我想訪問特定網站的所有網頁一個類似用途的情況下,確保沒有任何死鏈接的地圖。我有辦法動態生成的步驟,然後返回並通過貝哈特處理的陣列。我不得不添加一個人工步驟「我打印出頁面」,以確保我可以在控制檯上看到目前正在測試的頁面。
/**
* @Then /^I should access all pages of site map "([^"]*)"$/
*/
public function iShouldAccessAllPagesOfSiteMap($selector) {
$page = $this->getSession()->getPage();
$locator = sprintf('#%s a', $selector);
$elements = $page->findAll('css', $locator);
$steps = array();
foreach ($elements as $element) {
/** @var \Behat\Mink\Element\NodeElement $element */
$steps[] = new Behat\Behat\Context\Step\When(sprintf('I print out page "%s"', $element->getAttribute('href')));
$steps[] = new Behat\Behat\Context\Step\When(sprintf('I go to "%s"', $element->getAttribute('href')));
$steps[] = new Behat\Behat\Context\Step\Then('the response status code should be 200');
}
return $steps;
}
/**
* @When /^I print out page "([^"]*)"$/
*/
public function iPrintOutThePage($page) {
$string = sprintf('Visiting page ' . $page);
echo "\033[36m -> " . strtr($string, array("\n" => "\n| ")) . "\033[0m\n";
}
然後我的情況如下所示:
Scenario: my website has no "dead" pages
Given I am on "/examples/site-map/"
Then I should access all pages of site map "c118"
簡直太棒了!!!!! Tahnks – realtebo 2013-09-02 15:38:59
而是返回true/false時最好能夠簡單地拋出一個異常。 Behat會將其視爲一步失敗。 – 2013-06-05 12:27:55