Java safardriver在@Aftermethod中调用driver.close()之前自动关闭

Java safardriver在@Aftermethod中调用driver.close()之前自动关闭,java,selenium,selenium-webdriver,safaridriver,Java,Selenium,Selenium Webdriver,Safaridriver,我在Windows7上的safari浏览器版本5.1.7中运行以下测试脚本 运行@test方法后,我正在@aftermethod中调用driver.quit()。但是safari浏览器在到达@aftermethod并抛出java.lang.NullPointerException错误之前关闭。由于此新的safari浏览器实例在浏览器关闭后未打开。如何解决此问题?如何覆盖safari关闭?下面是执行日志 public class Test{ WebDriver driv

我在Windows7上的safari浏览器版本5.1.7中运行以下测试脚本

运行@test方法后,我正在@aftermethod中调用driver.quit()。但是safari浏览器在到达@aftermethod并抛出java.lang.NullPointerException错误之前关闭。由于此新的safari浏览器实例在浏览器关闭后未打开。如何解决此问题?如何覆盖safari关闭?下面是执行日志

  public class Test{
            WebDriver driver;
        @BeforeMethod
        public void init()
        {
            driver = invokeSafariDriver();
        }

    public static WebDriver invokeSafariDriver() throws InterruptedException
        {
            //logger.log(LogStatus.INFO, "Launching Chrome driver");
            System.out.println("Launching Safari driver");

            System.setProperty("webdriver.safari.noinstall", "true");
            WebDriver driver = new SafariDriver();
            driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
            driver.manage().window().maximize();
            Thread.sleep(2000);
            return driver;
        }

        @Test
        public void launch
        {
            driver.get("www.google.com");
        }


      @AfterMethod(alwaysRun=true)
        public void closeBrowser()
        {
            try{
                System.out.println("Closing the browser");
                logger.log(LogStatus.INFO, "Closing the Browser");
                driver.quit();
            }
            catch(Exception e){
                driver.close();

            }

        }

Dec 01, 2016 4:54:45 PM org.openqa.selenium.safari.SafariDriverServer start
INFO: Server started on port 7469
Dec 01, 2016 4:54:45 PM org.openqa.selenium.safari.SafariDriverCommandExecutor start
INFO: Launching Safari
Dec 01, 2016 4:54:45 PM org.openqa.selenium.safari.SafariDriverCommandExecutor start
INFO: Waiting for SafariDriver to connect
Dec 01, 2016 4:54:48 PM org.openqa.selenium.safari.SafariDriverChannelHandler$1 operationComplete
INFO: Connection opened
Dec 01, 2016 4:54:48 PM org.openqa.selenium.safari.SafariDriverCommandExecutor start
INFO: Driver connected in 3408 ms
Dec 01, 2016 4:54:48 PM org.openqa.selenium.safari.SafariDriverCommandExecutor stop
INFO: Shutting down
Dec 01, 2016 4:54:48 PM org.openqa.selenium.safari.SafariDriverCommandExecutor stop
INFO: Closing connection
Dec 01, 2016 4:54:49 PM org.openqa.selenium.safari.SafariDriverCommandExecutor stop
INFO: Stopping Safari
Dec 01, 2016 4:54:49 PM org.openqa.selenium.os.UnixProcess$SeleniumWatchDog destroyHarder
INFO: Command failed to close cleanly. Destroying forcefully (v2). org.openqa.selenium.os.UnixProcess$SeleniumWatchDog@c540f5a
Dec 01, 2016 4:54:49 PM org.openqa.selenium.safari.SafariDriverCommandExecutor stop
INFO: Stopping server
Dec 01, 2016 4:54:49 PM org.openqa.selenium.safari.SafariDriverServer stop
INFO: Stopping server
Dec 01, 2016 4:54:49 PM org.openqa.selenium.safari.SafariDriverCommandExecutor stop
INFO: Shutdown complete
FAILED CONFIGURATION: @AfterMethod closeBroser
java.lang.NullPointerException
at com.test.betawoohoo.Example.closeBroser(Example.java:289)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:564)

您应该先初始化WebDriver实例,然后再使用它

WebDriver driver;

@BeforeMethod
public void init()
{
    driver = new SafariDriver();
}

@Test
public void launch
{
    driver.get("www.google.com");
}

@AfterMethod
public void tearDown()
{
    driver.quit();
}

您应该在
init()
method之外定义Webdriver,以便在其他方法中也可以访问它

    WebDriver driver;

    @BeforeMethod
    public void init()
    {
        driver = new SafariDriver();
    }

    @Test
    public void launch
    {
        driver.get("www.google.com");
    }

    @AfterMethod
    public void tearDown()
    {
        driver.quit();
    }
试试这个

public class Test{
        public WebDriver driver;

        @BeforeMethod
        public void init()
        {
            invokeSafariDriver();
        }

    public static void invokeSafariDriver() throws InterruptedException
        {
            //logger.log(LogStatus.INFO, "Launching Chrome driver");
            System.out.println("Launching Safari driver");

            System.setProperty("webdriver.safari.noinstall", "true");
            driver = new SafariDriver();
            driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
            driver.manage().window().maximize();
            Thread.sleep(2000);
            //return driver;
        }

        @Test
        public void launch()
        {
            driver.get("www.google.com");
        }


      @AfterMethod(alwaysRun=true)
        public void closeBrowser()
        {
            try{
                System.out.println("Closing the browser");
                logger.log(LogStatus.INFO, "Closing the Browser");
                driver.quit();
            }
            catch(Exception e){
                driver.close();

            }

        }

测试代码在哪里?在测试方法中,我只是打开浏览器,在beforemethod中,我实例化了safaridriver,比如WebDriver driver=new safaridriver();请在问题中添加相关代码。代码更新:)如何
launch()
tearDown()
甚至知道
driver
是什么?由于Safaridriver自动关闭浏览器,Aftermethod中出现异常。您可以在safaridriver关闭连接并关闭浏览器的位置查看我的日志。我面临的主要问题是“Safari浏览器在driver.quit()调用之前自动关闭”为什么要在
invokeSafariver()方法中再次定义
WebDriver
,删除WebDriver请尝试使用下面的代码
System.setProperty(“WebDriver.Safari.noinstall”,“true”);driver=新的SafariDriver()
使用以下命令更新
inti()
方法
public void init(){driver=invokesafridriver();}
public static void invokesafridriver()抛出interruptedeexception{//logger.log(LogStatus.INFO,“启动Chrome驱动程序”);System.out.println(“启动Safari驱动程序”);System.setProperty(“webdriver.Safari.noinstall”,“true”);driver=new SafariDriver();……Thread.sleep(2000);//return driver;}