2013-05-23 2 views
3

저는 Behat과 함께 내부 사이트를 실행하고 있으며 대부분은 실제로 잘 진행되고 있습니다. 그러나 문제는 사이트의 특정 부분에 작업을 완료하기 위해 팝업 창이 나타납니다. 이 경우 우리는 "철회"버튼을 누르면 팝업이 나타나서 이유를 선택하고 저장합니다.Mink, Selenium 2 및 Behat이있는 팝업 창과 어떻게 상호 작용합니까?

내가이 앱을 실제로 디자인했다면 사이트에서 팝업 창이 사용되지 않을 것입니다. 그러나 나는 자동화 된 기능 테스트를 구현해야하는 새로운 사람이다. (그리고 나는 그것을 어떻게 시작해야하는지 배우고있다.) 그래서 나는이 시점에서 사이트 디자인에 대한 어떠한 말도하지 않습니다 (시간이지나면서 많은 변화를 추진할 것입니다).

저는 Ubuntu 12.10 시스템에서 Mink와 Selenium 2 드라이버를 사용하여 Behat을 실행하고 있습니다 (결국 IE에서 테스트하기 위해 Windows 환경에서 일부 테스트를 실행해야합니다). 또한 PhantomJS를 사용하여 일부 설정을 테스트합니다.

어쨌든 셀 늄 2 드라이버 (또는 PhantomJS)를 통해 어떻게 든 팝업 창을 사용하여 Behat/Mink를 지원합니까? 나는이 자동화 설정의 초기 단계에 있으며 실제로는 도구로 실험하고 있습니다. 이것을 처리 할 수있는 더 나은 도구가 있다면 알려주십시오.

내 기본 질문은 Behat/Mink가 팝업 창을 사용하고 상자를 선택하고 입력란을 채우고 저장 버튼을 클릭하도록하는 방법입니다. 새로 태어난 창과 직접 대화하는 것 이외에는 모든 것을 처리하는 방법을 알고 있습니다. 어떤 아이디어/제안이라도 환영받을 것입니다.

감사합니다.

답변

3

그래서 Mink에는 몇 가지 창 전환 기능이 포함되어 있지만이 창을 식별 할 수있는 방법은 없습니다. 그래서 두 개의 함수 getWindowName()과 getWindowNames()를 작성하여 현재 창과 열려있는 모든 창을 식별합니다. GitHub 프로젝트에서 이러한 변경 사항을 커밋했습니다. 수정 사항이 곧 코드 기반으로 구현 될 것으로 보입니다.

하지만 이러한 변경 사항으로 나는 윈도우를 아무 문제없이 전환 할 수 있습니다.

링크 : 우리가 미래에 다시 접근 할 수 있도록 우리는 또한 이러한 창 이름을 지정할 수 있습니다 https://github.com/Behat/Mink/pull/341

1

윈도우의 초점을 설정하면.

이 방법을 우리는 쉽게 팝업 창 사이를 전환하고 테스트를 계속 사용 ...

/** 
* @Then I switch to popup :name 
* 
* @param $name 
*/ 
public function iSwitchToPopup($name) 
{ 
    $this->iSetMainWindowName(); 
    $this->getSession()->switchToWindow($name); 
} 

/** 
* @Then I set main window name 
*/ 
public function iSetMainWindowName() 
{ 
    $window_name = 'main_window'; 
    $script = 'window.name = "' . $window_name . '"'; 
    $this->getSession()->executeScript($script); 
} 

/** 
* @Then I switch back to main window 
*/ 
public function iSwitchBackToMainWindow() 
{ 
    $this->getSession()->switchToWindow('main_window'); 
}