切换到任何新窗口

时间:2019-09-19 09:57:20

标签: java windows selenium

我正在使用硒编写代码。

在特定的单击上,有机会进入两个窗口之一。而且两个窗口都需要大约20-50秒的时间才能显示。 所以我想切换到出现的任何窗口。

我无法预测哪个窗口将会出现 当前过程-我正在搜索主窗口几秒钟,如果找不到,我正在尝试搜索带有确定按钮的小型弹出窗口。如果找到,请单击它。如果再次找不到,请尝试查找主窗口,这需要花费时间。 如果我有办法切换到最新窗口,并通过检查其标题来确定是哪个窗口并执行适当的操作。

已编辑-主窗口不是原始窗口。图片中共有3个窗口。我必须单击的一个窗口。现在,单击主窗口后可能会出现,或者单击确定按钮会出现小的弹出窗口。

4 个答案:

答案 0 :(得分:0)

在执行任何操作之前,应保存主窗口的窗口句柄。

String mainWindow = driver.getWindowHandle();

现在单击并执行以下操作:

您最多可以轮询30秒,间隔时间为5秒,一旦获得多个窗口句柄,就中断轮询。

Set<String> windows = driver.getWindowHandles();

让我知道您使用哪种语言。

我可以为您提供代码。

答案 1 :(得分:0)

您可以尝试使用类似的方法解决问题

// Store the current window handle
String mainWin = driver.getWindowHandle();

// Perform the click operation that opens new window

//Wait till driver.getWindowHandles() returns 2 windows

// Switch to new window opened
for(String winHandle : driver.getWindowHandles()){
    driver.switchTo().window(winHandle);
}
//Get current window to take decision on the next actions
String currentWin= driver.getWindowHandle();

// Perform the actions on new window

// Close the new window
driver.close();

// Switch back to original first window
driver.switchTo().window(mainWin);

答案 2 :(得分:0)

要处理窗口大小,可以使用.getWindowHandles(),然后尝试使用while loop等待新窗口出现,然后可以再次迭代所有当前窗口。

int sizeBefore = driver.getWindowHandles().size();
elemnt.click();//to bring up new windows

//until current windows size>before, please keep adding timeout
while(driver.getWindowHandles().size()==sizeBefore) {
    //wait in milliseconds
    Thread.sleep(500);
}

//handle current size windows
ArrayList<String> hnds = new ArrayList<String> (driver.getWindowHandles());

//iteration windows
for(String hnd: hnds) {
    driver.switchTo().window(hnd);
    System.out.println(driver.getTitle());
}

要切换到特定窗口,请使用:

driver.switchTo().window(hnds.get(index));

答案 3 :(得分:0)

您好,您可以使用Javascript切换窗口:以下是代码:

((JavascriptExecutor)LoginDriver).executeScript("window.open('about:blank', '-blank')");
    // To switch to the new tab
  ArrayList<String> tabs = new ArrayList<String>(LoginDriver.getWindowHandles());
  LoginDriver.switchTo().window(tabs.get(1));