使用Selenium Webdriver在浏览器窗口之间切换

时间:2017-02-07 20:48:39

标签: java google-chrome selenium selenium-webdriver

我使用关键字驱动的框架并从DS.java文件中调用它。我的要求如下:

  1. 浏览器窗口01:执行任务,
  2. 点击window01中的网址
  3. 打开一个新的window02浏览器
  4. 在window02上,执行某些任务,
  5. 关闭window02并将控制权切换到window01,
  6. 我收到错误org.openqa.selenium.NoSuchWindowException: no such window. (Session info: chrome=55.0.2883.87)
  7. (Driver info: chromedriver=2.26.436362 (5476ec6bf7ccbada1734a0cdec7d570bb042aa30),platform=Windows NT 6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information)

    我已经完成了下面提到的代码,但它对我没用。

    (able to get the window handle here: CDwindow-b20d349b-3cb5-42ed-9f77-5229c88d4300)

    public static void store_ParentWindow(String TCID,String vTCD,String vKW) throws IOException, InterruptedException, AWTException, BiffException, ParseException{
        String parentWindow = driver.getWindowHandle();
        DS.envVar.put("parentWindow", parentWindow);
        Thread.sleep(5000);
        System.out.println(DS.envVar.get("parentWindow"));  
        }
    

    public static void switch_ParentWindow(String TCID,String vTCD,String vKW) throws IOException, InterruptedException, AWTException, BiffException, ParseException{
    
        driver.close();
        String parentWindow = DS.envVar.get("parentWindow");
        System.out.println(DS.envVar.get("parentWindow"));
        driver.switchTo().window(parentWindow);
        driver.switchTo().defaultContent();
        Thread.sleep(5000);
        }
    

    任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

我怀疑控件是在父窗口上,当 driver.close(); switch_ParentWindow 方法中执行时。我建议你,一旦你点击窗口中的URL,就会存储窗口句柄,这会导致打开新窗口,即在步骤2.你可以使用以下代码来实现:

Set<String> handles = driver.getWindowHandles();
Iterator<String> itr = handles.iterator();
String parentWindow = itr.next();
String newWindow = itr.next();

每当您需要关闭新窗口时,首先确保焦点在新窗口上然后关闭它。您可以使用以下代码执行此操作:

driver.switchTo().window(newWindow);
driver.close();

然后,您可以切换到父窗口并继续执行所需的操作。您可以使用以下代码切换到父窗口:

driver.switchTo().window(parentWindow);

如果您有任何疑问,请与我们联系。

答案 1 :(得分:0)

请尝试以下代码。

String winHandleBefore = driver.getWindowHandle();
for(String winHandle : driver.getWindowHandles())   // Switch to new window opened.
{
    driver.switchTo().window(winHandle);
}    
driver.switchTo().window(winHandleBefore);          // move to previously opened window.
相关问题