如何从RFT中的ProcessTestObject获取TopLevelTestObject?

时间:2013-07-15 13:13:36

标签: java rft

给定一个ProcessTestObject,有没有办法检索与该进程关联的窗口作为BrowserTestObject或至少一个TopLevelTestObject? E.g。

// 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标记也失败了。

我可以在RootTestObject中搜索HtmlBrowser,它可能会在98%的时间内工作。但是,我真的更喜欢一种方法来保证我抓住刚刚启动的浏览器,而不是一些可能在之前的测试中保持打开的杂散窗口。我能想到的唯一其他选择是搜索所有浏览器窗口并事先关闭它们,但我认为可能有一个更简单的解决方案。

1 个答案:

答案 0 :(得分: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();    

}

//注意 - 对于IE8及更高版本,您需要将ivory.properties文件中的标志设置为true rational.test.ft.enablelcieprocessing =真