2013-07-15 3 views
0

ProcessTestObject를 사용하면 해당 프로세스와 연결된 창을 BrowserTestObject 또는 적어도 TopLevelTestObject로 검색 할 수 있습니까? 예 :RFT의 ProcessTestObject에서 TopLevelTestObject를 얻으려면 어떻게해야합니까?

// Open IE at http://www.google.com/ 
ProcessTestObject browserProcess = startApp("Google"); 
// Wait for the browser to load...there's probably a better way, but I don't know it. 
sleep(10); 
// Now what? 

ProcessTestObject에는 사용할 수있는 자식이없는 것으로 보입니다. 나는

browserProcess.find(atDescendant(".class", "Html.HtmlBrowser")); 

browserProcess.find(atDescendant(".class", "Html.HtmlDocument")); 

을 시도했지만도 검색이 어떤 결과를 얻을 수 있습니다. 특정 HTML 태그를 찾는 것도 실패했습니다.

나는 HtmlBrowser에 대한 RootTestObject를 검색 할 수 있으며 아마도 98 %의 시간 동안 작동 할 것입니다. 그러나, 나는 방금 전에 시작한 브라우저를 잡아서 이전 테스트에서 열어 놓은 길잃은 창이 아닌 것을 보장하는 방법을 선호합니다. 내가 생각할 수있는 유일한 대안은 모든 브라우저 창을 검색하고 미리 닫는 것입니다. 그러나 더 간단한 해결책이있을 것이라고 생각했습니다.

답변

2

브라우저를 닫고 새 브라우저를 열면 재생이 개체를 찾을 때 이전 브라우저에서 검색 할 필요가 없으므로 좋습니다.

ProcessTestObject을 얻을 수있는 또 다른 방법이 될 수 :

public void testMain(Object[] args) 
{ 
    ProcessTestObject pto = startBrowser("http://www.myurl.com"); 
    System.out.println("PTO "+ pto.getProcessId()); 
    TestObject[] browsers = find(atChild(".class", "Html.HtmlBrowser")); 
    for(TestObject browser:browsers) 
    { 
     if(pto.getProcessId() == browser.getProcess().getProcessId()) 
     { 
      //we hv a match, use it 
      ((BrowserTestObject)browser).maximize(); 
     } 

    } 
    unregisterAll();  

} 

// 참고 - 당신은 ivory.properties의 플래그가 true rational.test.ft.enablelcieprocessing로 파일을 설정해야합니다 IE8과 위 = true

+0

정확히 내가 뭘 찾고 있었는지, 고마워. – Doval

+0

ivory.properties 파일을 변경하고 솔루션을 사용하다가 일관성없는 결과가 발생했습니다. 경우에 따라 startApp/startBrowser가 올바른 processId를보고하고 때로는 그렇지 않습니다. 나는 대체 솔루션을 생각해 냈습니다. startApp에서 반환 한 processId와 일치하는 브라우저를 확인하기보다는 startApp 호출 전에 processId가없는 브라우저를 확인합니다. RFT의 구성 또는 startApp의 작동 방식에 관계없이 올바르게 작동해야합니다. – Doval

+0

새 브라우저를 시작하기 전에 열려있는 브라우저 창을 닫는 방법은 어떻습니까? 두 가지 방법 모두 시도해보고 어느 것이 더 효율적인 지 확인할 수 있습니다. – Prakash