safardriver закрывается автоматически перед вызовом driver.close () в @Aftermethod

Я запускаю ниже тестовые сценарии в браузере Safari версии 5.1.7 на Windows 7.

После запуска метода @test я вызываю driver.quit () в @aftermethod. Но браузер Safari закрывается до того, как достигнет @aftermethod и выдает ошибку java.lang.NullPointerException. Из-за этого новый экземпляр браузера 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)

person Praveen PS    schedule 01.12.2016    source источник
comment
Где тестовый код?   -  person Naman    schedule 01.12.2016
comment
в тестовом методе я просто открываю браузер, а в предыдущем методе создаю экземпляр safaridriver, например, WebDriver driver = new Safaridriver ();   -  person Praveen PS    schedule 01.12.2016
comment
Пожалуйста, также добавьте соответствующий код к вопросу.   -  person Naman    schedule 01.12.2016
comment
Код обновлен :)   -  person Praveen PS    schedule 01.12.2016
comment
откуда launch() и tearDown() даже знают, что такое driver ??   -  person Naman    schedule 01.12.2016
comment
Я создал драйвер как глобальную переменную и назначил экземпляр safari переменной драйвера и запустил тот же набор. Проблема заключается в том, что после выполнения запуска драйвер сафари закрывается сам по себе, и возникает исключение, когда выполнение достигает метода tearDown, поскольку браузер сафари не открыт, чтобы его можно было закрыть.   -  person Praveen PS    schedule 01.12.2016
comment
Я сомневаюсь, что предоставленный вами код и трассировка стека не связаны. Пытаюсь сделать вывод из java.lang.NullPointerException at com.test.betawoohoo.Example.closeBroser(Example.java:289). Также я не вижу в текущем коде при условии, что драйвер является глобальной переменной !! Пожалуйста, предоставьте оптимальные сведения, чтобы получить помощь в этом вопросе. В настоящее время вопрос очень низкого качества. Возможно, вы захотите пройти через stackoverflow.com/help/mcve   -  person Naman    schedule 01.12.2016
comment
обновлен полный код. дайте мне знать для получения дополнительных разъяснений   -  person Praveen PS    schedule 01.12.2016
comment
код все равно не компилируется. Попробуй это сделать. Вы также не можете получить исключение в методе Example class closeBroser с этим обновленным кодом. com.test.betawoohoo.Example.closeBroser(Example.java:289)   -  person Naman    schedule 01.12.2016
comment
Давайте продолжим это обсуждение в чате.   -  person Praveen PS    schedule 02.12.2016


Ответы (3)


Вы должны определить Webdriver вне init() метода, чтобы он мог быть доступен и другими методами.

    WebDriver driver;

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

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

    @AfterMethod
    public void tearDown()
    {
        driver.quit();
    }
person Girish Bellamkonda    schedule 01.12.2016
comment
исключение произошло в Aftermethod, так как браузер автоматически закрывается Safaridriver. Вы можете проверить мой журнал, где safaridriver закрывает соединение и закрывает браузер. Основная проблема, с которой я столкнулся, заключается в том, что браузер Safari закрывается сам по себе до вызова driver.quit (). - person Praveen PS; 01.12.2016
comment
Почему вы снова определяете WebDriver в методе invokeSafariDriver(), Удалить WebDriver Попробуйте с помощью кода нижеSystem.setProperty("webdriver.safari.noinstall", "true"); driver = new SafariDriver(); - person Girish Bellamkonda; 01.12.2016
comment
обновите метод inti() указав ниже public void init() { driver = 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(); ...... Thread.sleep(2000); // return driver; } - person Girish Bellamkonda; 01.12.2016

Вы должны сначала инициализировать экземпляр 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();
}
person Shoaib Akhtar    schedule 01.12.2016

Попробуй это,

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();

            }

        }
person Girish Bellamkonda    schedule 01.12.2016