我想测试一个具有动态菜单结构的网站。我想遍历所有菜单项并在每个页面上运行相同的测试系列。我们谈论的是100多页,这些页面会发生变化。
我想用behat或codeception做到这一点。
有人知道如何做到这一点吗?
答案 0 :(得分:1)
我有一个类似的用例,我想访问给定站点地图的所有页面,确保没有任何死链接。我有动态生成一系列步骤的方法,然后由Behat返回并处理。我不得不添加一个人工步骤“我打印页面”,以确保我可以在控制台上看到当前测试的页面。
/**
* @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"
答案 1 :(得分:0)
使用Behat with Mink时,您可以使用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;
}