2014-01-07 2 views
0

우리는 기능 테스트에 Geb를 사용하고 있습니다. 앱에서 링크를 클릭하면 새 창이 열립니다. 우리의 "when :"절에서 withNewWindow()를 사용하여 링크를 클릭하고 새 창을 열고 몇 가지 간단한 어설 션을 만들 수 있습니다. 문제는 "then :"절에서 더 많은 주장을하고 더 많은 일을하기를 원하지만 우리 창이 도착하기 전에 우리의 창이 닫힙니다.withNewWindow()를 사용하는 동안 "then :"절에 도달하기 전에 창이 닫힙니다.

when: "I navigate to the link" 
     JQInstaller jq = new JQInstaller() 
     jq.installJQ(browser) 
     homeTab.jquery.mouseover() 
     report "Mouse Over1" 
     waitFor {HealthPageLink.present} 
     withNewWindow({HealthPageLink.click() },{ 
      assert (title.toString() == 'Patient Financing Portal') 
      at LoginPage 
      report "Login Page" 
     } 
    ) 

    then: "I am at the Login Page" 
     at LoginPage 
     report "Login Page" 

": when :"절 다음에 새 창이 닫혀 있기 때문에 then : 절에서 "LoginPage"가 null로 나타납니다.

더 많은 테스트를 실행하려면 어떻게이 창 컨텍스트를 열어 두어야합니까?

답변

2

기본적으로 Geb는 withNewWindow()을 사용하여 열린 창을 닫습니다. 당신은 close option을 사용하여이 기본 동작을 억제 할 수

withNewWindow(close: false, { HealthPageLink.click() }) { 
    ... 
} 

창은 닫히지 않습니다하지만 당신은 then: 블록에 컨텍스트 외부 될 것입니다. 해당 컨텍스트로 돌아 가기 위해 `withWindow()'을 사용할 수 있습니다.

withWindow({ title.toString() == 'Patient Financing Portal }) { 
    ... 
} 

당신은 실제로 당신의 when: 블록의 첫 번째 장소에서 withNewWindow()를 사용하여 단순히 건강 페이지 링크를 클릭하고 필요한 모든 주장을 수행 할 것 then: 블록에 withWindow()를 사용하지 고려할 수 있습니다.

편집 :이 어디하지만 페이지가 원래로 다시 전환 (도 및 withWindow()) withNewWindow()의 컨텍스트를 떠난 후 문서화되어 있지 않습니다.

withWindow({ title.toString() == 'Patient Financing Portal }, page: LoginPage) { 
    ... 
} 
+0

이 작동하지만주의를 가지고처럼 보인다 : 당신은 LoginPage로 다시 전환 할 page 옵션을 사용할 수 있습니다. 우리는 모든 속성 (필드 등)을 이전 페이지 모델에 추가해야하며 새 팝업 모델은 팝업하지 않습니다. 오류는 어떤 이유로 다른 윈도우의 컨텍스트에 있다고 여전히 생각하는 것으로 나타납니다. 이것이 왜 있는지 아십니까? – jcd

+1

어디에도 문서화되어 있지는 않지만'withNewWindow()'와'withWindow()'는 전달 된 클로저 밖에서 사용 된 페이지로 페이지를 되돌립니다. 나는 그 문제를 만들었다. (http://jira.codehaus.org/browse/GEB-279). 나는 또한 대응하기 위해 나의 반응을 편집했다. – erdi