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