下面是我的代码:
//点击打开第二个窗口。页面是页面对象引用,方法被编写为单击按钮
public enterDetails(String fname)
{
firstPage.clickAddAdditionalDetail();
String parentWindow=driver.getWindowHandle();
String childWin1="";
String childWin2="";
Set<String> windows=driver.getWindowHandles();
Iterator<String> iterator=windows.iterator();
childWin1=iterator.next();
driver.switchTo.window(childWin1);
firstPage.clickOneTimeDetail();// able to click this on second window, this click opens third window
Thread.sleep(3000);
childWin1=driver.getWindowHandle();
windows=driver.getWindowHandles();
childWin2=iterator.next();
driver.switchTo.window(childWin2);
// the third window is opened but driver control is not getting passed i think. even when i print all window ids it is printing same id for all parent and child
addDetailPage.enterFirstName(String fname);
}
1条答案
按热度按时间ufj5ltwl1#
问题
问题一:
一个集合的迭代器,即使它是hashset,但它不是有序的。next()从迭代器对象随机返回元素,直到迭代器大小变为零。因此,它不应该用于开关窗口逻辑,因为您不会总是得到您想要的元素。
仅当您希望以任何顺序遍历所有窗口时才使用它。
问题二
在每个元素输出之后,迭代器从内存中删除元素并减小迭代器的大小。
因此,如果您有一个大小为1的集合,并且尝试调用iterator.next()两次,它将抛出element not found,因为first next()的大小为0。对于second next(),您试图从一个大小为零的迭代器中获取元素,因为该元素的大小会逐渐减小
在你的代码里
你真的在做下面的逻辑。
如果运行此代码,您将得到一个错误,说明第二个a.next()没有这样的元素。
这是因为在创建迭代器时,哈希集只有一个元素。这将创建大小为1的迭代器。在first.next()上,它删除一个元素并使大小为零。
即使将哈希集更新为两个元素,迭代器也不会重新初始化。因此,当调用a.next()时,它试图从大小为“0”的迭代器中查找某个符号。
溶液
用途:
同时确保您拨打:
每次打开一个新窗口以便重新初始化数组时。