0

给定一个 ProcessTestObject,有没有办法将与该进程关联的窗口检索为 BrowserTestObject 或至少一个 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 标记也失败了。

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

4

1 回答 1

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 文件中设置一个标志为 truerational.test.ft.enablelcieprocessing=true

于 2013-07-15T18:24:05.857 回答