2013-05-11 3 views
4

역동적 인 menustructure가있는 웹 사이트를 테스트하고 싶습니다. 모든 menuitem을 반복하고 모든 페이지에서 같은 일련의 테스트를 실행하고 싶습니다. 우리는 재구성을 바꾸는 100 개 이상의 페이지를 말하고 있습니다.각 요소에 대해 behat 또는 codesception을 사용합니다.

나는 이것을 behat 또는 codeception과 함께하고 싶습니다.

아무에게도이 작업을 수행하는 방법에 대한 아이디어가 있습니까? 밍크와 Behat를 사용하는 경우

답변

0

, 당신은 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; 
} 
+2

오히려입니다/단순히 예외를 던져 좋을 것 false입니다. Behat은이를 단계적 실패로 간주 할 것입니다. –

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" 

전체 요점은 여기에 진정한 반환 https://gist.github.com/fudriot/6028678

+0

Simply fantastic !!!!! 타크 스 – realtebo

관련 문제