【问题标题】:safardriver closes automatically before driver.close() is called in @Aftermethodsafardriver 在@Aftermethod 中调用 driver.close() 之前自动关闭
【发布时间】:2016-12-01 11:31:52
【问题描述】:

我在 Windows 7 上的 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)

【问题讨论】:

  • 测试代码在哪里?
  • 在测试方法中我只是打开浏览器,在之前的方法中我正在实例化 safaridriver,如 WebDriver driver = new Safaridriver();
  • 请在问题中添加相关代码。
  • 代码更新:)
  • launch()tearDown() 怎么知道driver 是什么??

标签: java selenium selenium-webdriver safaridriver


【解决方案1】:

您应该在init() mehtod 之外定义 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();
    }

【讨论】:

  • Aftermethod 发生异常,因为浏览器被 Safaridriver 自动关闭。您可以查看我的日志,其中 safaridriver 关闭连接并关闭浏览器。我面临的主要问题是“Safari 浏览器在调用 driver.quit() 之前自行关闭”
  • 你为什么要在invokeSafariDriver()方法中再次定义WebDriver,删除WebDriver试试下面的代码System.setProperty("webdriver.safari.noinstall", "true"); driver = new SafariDriver();
  • 用下面的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; }更新inti()方法
【解决方案2】:

你应该先初始化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();
}

【讨论】:

    【解决方案3】:

    试试这个,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 2013-09-05
      • 2016-06-21
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      相关资源
      最近更新 更多