driver.quit()不关闭浏览器窗口 [英] driver.quit() does not close browser windows

查看:3421
本文介绍了driver.quit()不关闭浏览器窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个框架,其中我正在我的测试;任何错误导致的webdriver实例调用有点像handleexception方法,我称之为driver.quit()方法。我觉得driver.quit()试图关闭浏览器,但然后在浏览器投用的消息你要离开这个网页对话框 - 这是不照顾。有没有例外抛出,但是,当他们推出浏览器的其余测试用例不工作,但抛出一个模式对话框present例外,这是可以理解的。
我该如何解决此问题?

handleexception方式:

  Driver.getFailedTestCaseNames()加(this.getTestcaseName());
    串failedStepStr =;
     - 方法名称:+ stepNo + failedStepStr =,而执行步骤测试案例失败+ t.getMethodnm()+,字段名称:+ t.getField()+,字段值:+ t.getValue( );    LOG.error(测试案例名称:+ testcaseName +失败而执行步骤+ stepNo + - 方法名称:+ t.getMethodnm()+,字段名称:+ t.getField()+,字段值:​​
            + t.getValue()+ ExceptionUtils.getStackTrace(次));    CaptureScreenshot objCapturScreenshot =新CaptureScreenshot();    objCapturScreenshot.caputureImage(testcaseName);
    的System.out.println(在处理异常);
    driver.quit();    的System.out.println(测试案例失败:+ this.getTestcaseName());
    抛出新TestAutomationException(failedStepStr,日);

日志对于犯测试用例:

  org.openqa.selenium.remote.UnreachableBrowserException:错误与远程浏览器进行通信。它可能已经死亡。
    构建信息:版本:2.35.0,修订版:'c916b9d,时间:2013年8月12日15时42分01秒
    系统信息:os.name:Windows 7的,os.arch:'86',os.version:'6.1',java.version:1.7.0_11
    驱动方式:driver.version:RemoteWebDriver
        在org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:548)
        在org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:569)
        在org.openqa.selenium.remote.RemoteWebDriver.quit(RemoteWebDriver.java:423)
        在com.bmc.core.test.domain.TestCase.handleException(TestCase.java:364)
        在com.bmc.core.test.domain.TestCase.execute(TestCase.java:136)
        在sun.reflect.GeneratedMethodAccessor40.invoke(来源不明)
        在sun.reflect.DelegatingMethodAccessorImpl.invoke(来源不明)
        在java.lang.reflect.Method.invoke(来源不明)
        在org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
        在org.testng.internal.Invoker.invokeMethod(Invoker.java:702)
        在org.testng.internal.Invoker.invokeTestMethod(Invoker.java:894)
        在org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1219)
        在org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
        在org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
        在org.testng.TestRunner.privateRun(TestRunner.java:768)
        在org.testng.TestRunner.run(TestRunner.java:617)
        在org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
        在org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
        在org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
        在org.testng.SuiteRunner.run(SuiteRunner.java:240)
        在org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
        在org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:87)
        在org.testng.TestNG.runSuitesSequentially(TestNG.java:1185)
        在org.testng.TestNG.runSuitesLocally(TestNG.java:1110)
        在org.testng.TestNG.run(TestNG.java:1022)
        在org.testng.TestNG.privateMain(TestNG.java:1325)
        在org.testng.TestNG.main(TestNG.java:1294)
    org.openqa.selenium.WebDriverException:引起java.net.SocketTimeoutException:读超时
    构建信息:版本:2.35.0,修订版:'c916b9d,时间:2013年8月12日15时42分01秒
    系统信息:os.name:Windows 7的,os.arch:'86',os.version:'6.1',java.version:1.7.0_11
    驱动方式:driver.version:RemoteWebDriver
        在org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:75)
        在org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:527)
        ... 26更多
    java.net.SocketTimeoutException:引起读超时
        在java.net.SocketInputStream.socketRead0(本机方法)
        在java.net.SocketInputStream.read(来源不明)
        在java.net.SocketInputStream.read(来源不明)
        在org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:166)
        在org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:90)
        在org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:281)
        在org.apache.http.impl.conn.DefaultHtt presponseParser.parseHead(DefaultHtt presponseParser.java:92)
        在org.apache.http.impl.conn.DefaultHtt presponseParser.parseHead(DefaultHtt presponseParser.java:62)
        在org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
        在org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
        在org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
        在org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:219)
        在org.apache.http.protocol.Htt prequestExecutor.doReceiveResponse(HTT prequestExecutor.java:300)
        在org.apache.http.protocol.Htt prequestExecutor.execute(HTT prequestExecutor.java:127)
        在org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:712)
        在org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:517)
        在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
        在org.openqa.selenium.remote.HttpCommandExecutor.fallBackExecute(HttpCommandExecutor.java:319)
        在org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:298)
        在org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:66)
        ... 27更多

日志进行后续的测试案例是:

  com.bmc.core.test.exception.TestAutomationException:测试用例在执行第1步失败 - 方法名称:waitAndSwitchToWindow,
    字段名称:Inquira信息​​管理器,字段值:20000
            在com.bmc.core.test.domain.TestCase.handleException(TestCase.java:400)
            在com.bmc.core.test.domain.TestCase.execute(TestCase.java:136)
            在sun.reflect.GeneratedMethodAccessor40.invoke(来源不明)
            在sun.reflect.DelegatingMethodAccessorImpl.invoke(来源不明)
            在java.lang.reflect.Method.invoke(来源不明)
            在org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
            在org.testng.internal.Invoker.invokeMethod(Invoker.java:702)
            在org.testng.internal.Invoker.invokeTestMethod(Invoker.java:894)
            在org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1219)
            在org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
            在org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
            在org.testng.TestRunner.privateRun(TestRunner.java:768)
            在org.testng.TestRunner.run(TestRunner.java:617)
            在org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
            在org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
            在org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
            在org.testng.SuiteRunner.run(SuiteRunner.java:240)
            在org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
            在org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:87)
            在org.testng.TestNG.runSuitesSequentially(TestNG.java:1185)
            在org.testng.TestNG.runSuitesLocally(TestNG.java:1110)
            在org.testng.TestNG.run(TestNG.java:1022)
            在org.testng.TestNG.privateMain(TestNG.java:1325)
            在org.testng.TestNG.main(TestNG.java:1294)
    java.lang.reflect.InvocationTargetException:产生的原因
            在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
            在sun.reflect.NativeMethodAccessorImpl.invoke(来源不明)
            在sun.reflect.DelegatingMethodAccessorImpl.invoke(来源不明)
            在java.lang.reflect.Method.invoke(来源不明)
            在com.bmc.core.test.domain.TestCase.execute(TestCase.java:99)
            ... 22个
    org.openqa.selenium.UnhandledAlertException:引起模式对话框present:
    构建信息:版本:2.35.0,修订版:'c916b9d,时间:2013年8月12日15时42分01秒
    系统信息:os.name:Windows 7的,os.arch:'86',os.version:'6.1',java.version:1.7.0_11
    会话ID:ac1a28e7-2c24-443f-9c0e-d308645fab2d
    驱动方式:org.openqa.selenium.ie.InternetExplorerDriver
    功能[{=平台WINDOWS,javascriptEnabled = TRUE,elementScrollBehavior = 0,ignoreZoomSetting =假,enablePersistentHover = TRUE,
    ie.ensureCleanSession =假,browserName = Internet Explorer中,enableElementCacheCleanup = TRUE,unexpectedAlertBehaviour =辞退,
    版本= 10,ie.usePerProcessProxy =假,ignoreProtectedModeSettings =假,cssSelectorsEnabled = TRUE,requireWindowFocus =假,
    initialBrowserUrl = HTTP://www.localohst:10879 /,handlesAlerts = TRUE,ie.forceCreateProcessApi =假,nativeEvents = TRUE,browserAttachTimeout = 0,
    ie.browserCommandLineSwitches =,= takesScreenshot真正}]
            在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
            在sun.reflect.NativeConstructorAccessorImpl.newInstance(来源不明)
            在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(来源不明)
            在java.lang.reflect.Constructor.newInstance(来源不明)
            在org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:191)
            在org.openqa.selenium.remote.ErrorHandler.createUnhandledAlertException(ErrorHandler.java:172)
            在org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:141)
            在org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
            在org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:569)
            在org.openqa.selenium.remote.RemoteWebDriver.getWindowHandles(RemoteWebDriver.java:432)
            在com.bmc.core.test.app.Base.waitAndSwitchToWindow(Base.java:278)
            ... 27更多


保罗建议后

解决方案

我想出了这个片段,并能正常工作....它关闭退出所有的浏览器无论他们是否抛出一个警报在关闭...

 尝试
    {
    SET<串GT; windowIterator = driver.getWindowHandles();
    迭代器<串GT; ITER = windowIterator.iterator();
    的System.out.println(没有窗户的关闭=+ windowIterator.size());
    LOG.debug(没有窗户的关闭=+ windowIterator.size());
    INT I = 0;
    而(iter.hasNext())
    {
        尝试
        {
            我++;
            的System.out.println(LOPP值=+ I);
            LOG.debug(循环值=+ I);
            串windowHandle = iter.next();
            。driver.switchTo()窗口(windowHandle);
            串WINDOWTITLE = driver.getTitle();
            的System.out.println(称号=+ driver.getTitle()+ - 试图关闭此窗口);
            LOG.debug(称号=+ driver.getTitle()+ - 试图关闭此窗口);
            driver.close();
            视频下载(5000);            而(isAlert present())
                {
                尝试
                {
                    driver.switchTo()警报()接受()。
                    的System.out.println(警报关闭后接受了);
                    LOG.debug(警报关闭后接受了);
                    视频下载(5000);
                }
                赶上(例外五)
                {
                    e.printStackTrace();
                    LOG.debug(警告环...内,而 - >例外:+ e.getMessage());
                }
                }
            的System.out.println(称号=+ WINDOWTITLE + - 窗口关闭);
            LOG.debug(称号=+ WINDOWTITLE + - 窗口关闭);
        }
        赶上(例外五)
        {
            e.printStackTrace();
            LOG.debug(窗口循环...外部时 - >例外:+ e.getMessage());
        }
    }
    视频下载(5000);
    而(isAlert present())
    {
        driver.switchTo()警报()接受()。
        的System.out.println(警报接受之前退出);
        LOG.debug(警报接受辞职之前);
        视频下载(5000);
    }
    }
    赶上(例外五)
    {
        e.printStackTrace();
        LOG.debug(外异常:+ e.getMessage());
    }    driver.quit();
    的System.out.println(狭路相逢驱动程序实例);
    LOG.debug(狭路相逢驱动程序实例);
    // ================================================ ==================================

I have a framework wherein I am running my tests; any errors cause the WebDriver instance to call something like a handleexception method where I call the driver.quit() method. I feel that driver.quit() attempts to close the browser but then the browser throws a dialog box with message do you want to leave this page - which is not taken care of. There is no exception thrown, but remaining test cases do not work as they launch browser but throw a modal dialog present exception which is understandable. How can I work around this?

handleexception method :

    Driver.getFailedTestCaseNames().add(this.getTestcaseName());
    String failedStepStr = "";
    failedStepStr = "Test Case failed while executing step " + stepNo + " - Method Name:" + t.getMethodnm() + ", Field Name:" + t.getField() + " , Field value:" + t.getValue();        

    LOG.error("Test Case Name: " + testcaseName + " failed while executing step " + stepNo + " - Method Name:" + t.getMethodnm() + ", Field Name:" + t.getField() + " , Field value:"
            + t.getValue() + ExceptionUtils.getStackTrace(th));

    CaptureScreenshot objCapturScreenshot = new CaptureScreenshot();

    objCapturScreenshot.caputureImage(testcaseName);
    System.out.println(" in handle exception");
    driver.quit();

    System.out.println("Test case failed : "+this.getTestcaseName());
    throw new TestAutomationException(failedStepStr, th);

the log for guilty test case is :

    org.openqa.selenium.remote.UnreachableBrowserException: Error communicating with the remote browser. It may have died.
    Build info: version: '2.35.0', revision: 'c916b9d', time: '2013-08-12 15:42:01'
    System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_11'
    Driver info: driver.version: RemoteWebDriver
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:548)
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:569)
        at org.openqa.selenium.remote.RemoteWebDriver.quit(RemoteWebDriver.java:423)
        at com.bmc.core.test.domain.TestCase.handleException(TestCase.java:364)
        at com.bmc.core.test.domain.TestCase.execute(TestCase.java:136)
        at sun.reflect.GeneratedMethodAccessor40.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
        at org.testng.internal.Invoker.invokeMethod(Invoker.java:702)
        at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:894)
        at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1219)
        at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
        at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
        at org.testng.TestRunner.privateRun(TestRunner.java:768)
        at org.testng.TestRunner.run(TestRunner.java:617)
        at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
        at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
        at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
        at org.testng.SuiteRunner.run(SuiteRunner.java:240)
        at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
        at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:87)
        at org.testng.TestNG.runSuitesSequentially(TestNG.java:1185)
        at org.testng.TestNG.runSuitesLocally(TestNG.java:1110)
        at org.testng.TestNG.run(TestNG.java:1022)
        at org.testng.TestNG.privateMain(TestNG.java:1325)
        at org.testng.TestNG.main(TestNG.java:1294)
    Caused by: org.openqa.selenium.WebDriverException: java.net.SocketTimeoutException: Read timed out
    Build info: version: '2.35.0', revision: 'c916b9d', time: '2013-08-12 15:42:01'
    System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_11'
    Driver info: driver.version: RemoteWebDriver
        at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:75)
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:527)
        ... 26 more
    Caused by: java.net.SocketTimeoutException: Read timed out
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(Unknown Source)
        at java.net.SocketInputStream.read(Unknown Source)
        at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:166)
        at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:90)
        at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:281)
        at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:92)
        at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62)
        at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
        at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
        at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
        at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:219)
        at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
        at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
        at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:712)
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:517)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
        at org.openqa.selenium.remote.HttpCommandExecutor.fallBackExecute(HttpCommandExecutor.java:319)
        at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:298)
        at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:66)
        ... 27 more

the log for subsequent test cases is :

    com.bmc.core.test.exception.TestAutomationException: Test Case failed while executing step 1 - Method Name:waitAndSwitchToWindow,
    Field Name:Inquira Information Manager , Field value:20000
            at com.bmc.core.test.domain.TestCase.handleException(TestCase.java:400)
            at com.bmc.core.test.domain.TestCase.execute(TestCase.java:136)
            at sun.reflect.GeneratedMethodAccessor40.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
            at java.lang.reflect.Method.invoke(Unknown Source)
            at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
            at org.testng.internal.Invoker.invokeMethod(Invoker.java:702)
            at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:894)
            at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1219)
            at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
            at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
            at org.testng.TestRunner.privateRun(TestRunner.java:768)
            at org.testng.TestRunner.run(TestRunner.java:617)
            at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
            at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
            at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
            at org.testng.SuiteRunner.run(SuiteRunner.java:240)
            at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
            at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:87)
            at org.testng.TestNG.runSuitesSequentially(TestNG.java:1185)
            at org.testng.TestNG.runSuitesLocally(TestNG.java:1110)
            at org.testng.TestNG.run(TestNG.java:1022)
            at org.testng.TestNG.privateMain(TestNG.java:1325)
            at org.testng.TestNG.main(TestNG.java:1294)
    Caused by: java.lang.reflect.InvocationTargetException
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
            at java.lang.reflect.Method.invoke(Unknown Source)
            at com.bmc.core.test.domain.TestCase.execute(TestCase.java:99)
            ... 22 more
    Caused by: org.openqa.selenium.UnhandledAlertException: Modal dialog present: 
    Build info: version: '2.35.0', revision: 'c916b9d', time: '2013-08-12 15:42:01'
    System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_11'
    Session ID: ac1a28e7-2c24-443f-9c0e-d308645fab2d
    Driver info: org.openqa.selenium.ie.InternetExplorerDriver
    Capabilities [{platform=WINDOWS, javascriptEnabled=true, elementScrollBehavior=0, ignoreZoomSetting=false, enablePersistentHover=true,
    ie.ensureCleanSession=false, browserName=internet explorer, enableElementCacheCleanup=true, unexpectedAlertBehaviour=dismiss,
    version=10, ie.usePerProcessProxy=false, ignoreProtectedModeSettings=false, cssSelectorsEnabled=true, requireWindowFocus=false,
    initialBrowserUrl=http://www.localohst:10879/, handlesAlerts=true, ie.forceCreateProcessApi=false, nativeEvents=true, browserAttachTimeout=0,
    ie.browserCommandLineSwitches=, takesScreenshot=true}]
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
            at java.lang.reflect.Constructor.newInstance(Unknown Source)
            at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:191)
            at org.openqa.selenium.remote.ErrorHandler.createUnhandledAlertException(ErrorHandler.java:172)
            at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:141)
            at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
            at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:569)
            at org.openqa.selenium.remote.RemoteWebDriver.getWindowHandles(RemoteWebDriver.java:432)
            at com.bmc.core.test.app.Base.waitAndSwitchToWindow(Base.java:278)
            ... 27 more

解决方案

after suggestions by paul i came up with this snippet and this works fine.... it closes all browsers on exit whether or not they throw a alert on closing...

    try
    {
    Set<String> windowIterator = driver.getWindowHandles();            
    Iterator<String> iter = windowIterator.iterator();
    System.out.println("no of windows to close ="+windowIterator.size());
    LOG.debug("no of windows to close ="+windowIterator.size());
    int i=0;
    while (iter.hasNext()) 
    {   
        try 
        {
            i++;
            System.out.println("lopp value = "+i);
            LOG.debug("loop value = "+i);
            String windowHandle = iter.next();
            driver.switchTo().window(windowHandle);
            String windowTitle = driver.getTitle();
            System.out.println("title="+driver.getTitle()+" - attempting to close this window");
            LOG.debug("title="+driver.getTitle()+" - attempting to close this window");
            driver.close();
            Thread.sleep(5000);

            while(isAlertPresent())
                {
                try 
                {
                    driver.switchTo().alert().accept();
                    System.out.println("alert accepted after close");
                    LOG.debug("alert accepted after close");
                    Thread.sleep(5000);
                }
                catch (Exception e) 
                {
                    e.printStackTrace();
                    LOG.debug("alert loop... inner while --> exception : "+e.getMessage());
                }   
                }               
            System.out.println("title="+windowTitle+" - window closed");
            LOG.debug("title="+windowTitle+" - window closed");
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
            LOG.debug("window loop... outer while --> exception : "+e.getMessage());
        }
    }
    Thread.sleep(5000);
    while(isAlertPresent())
    {
        driver.switchTo().alert().accept();
        System.out.println("alert accepted before quit");
        LOG.debug("alert accepted before quit");
        Thread.sleep(5000); 
    }       
    }
    catch (Exception e) 
    {
        e.printStackTrace();
        LOG.debug("outer exception : "+e.getMessage());
    }

    driver.quit();
    System.out.println("quitting the driver instance");
    LOG.debug("quitting the driver instance");
    //==================================================================================

这篇关于driver.quit()不关闭浏览器窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆