Java 在多种方法中使用单个驱动程序实例&;班级

Java 在多种方法中使用单个驱动程序实例&;班级,java,selenium,webdriver,driver,instance,Java,Selenium,Webdriver,Driver,Instance,我创建了两个包,每个包包含一个java类文件。第一个包中的实用程序类启动驱动程序并使用方法关闭驱动程序-launchDriver()&closeDriver()。在第二个包示例中,java类文件包含对这些方法的调用。使用launchDriver()成功启动驱动程序,但当驱动程序被传递到closeDriver方法时,该值变为null 请提供解决方案。代码如下所示 public class Utility { public static WebDriver driver; publ

我创建了两个包,每个包包含一个java类文件。第一个包中的实用程序类启动驱动程序并使用方法关闭驱动程序-
launchDriver()
&
closeDriver()
。在第二个包示例中,java类文件包含对这些方法的调用。使用
launchDriver()
成功启动驱动程序,但当驱动程序被传递到
closeDriver
方法时,该值变为null

请提供解决方案。代码如下所示

public class Utility {

    public static WebDriver driver;
    public static String driverpath="E:\\Drivers";

    @Test
    public static WebDriver launchDriver(final String browser,final String url){
        if(browser=="firefox"){
            WebDriver driver=new FirefoxDriver();
            driver.manage().window().maximize();
            driver.get(url);
        }else if(browser=="chrome"){
            System.setProperty("webdriver.chrome.driver", driverpath+"\\chromedriver.exe");
            WebDriver driver=new ChromeDriver();
            driver.manage().window().maximize();
            driver.get(url);
        }else if(browser=="ie"){
            System.setProperty("webdriver.ie.driver", driverpath+"\\IEDriverServer.exe");
            WebDriver driver=new InternetExplorerDriver();
            driver.manage().window().maximize();
            driver.get(url);
        }else{
            WebDriver driver=new FirefoxDriver();
            driver.manage().window().maximize();
            driver.get(url);
        }
        return driver;

    }
    @Test
    public static WebDriver closeDriver(WebDriver driver){
        Utility.driver=driver;
        driver.quit();
        return driver;

    }
}
测试包中的类示例

public class Example{

    @Test
    public static void launchConfig(){
        Utility.launchDriver("chrome", "https://www.google.com");
        //Utility.launchDriver("firefox","www.google.com");
        Utility.closeDriver(Utility.driver);
    }
}

创建一个抽象测试类,并让您的测试类扩展它。您的抽象测试类可能如下所示:

    public abstract class Abstract test {
      //delcare driver
      public static WebDriver driver;

      //Assign the correct driver
      @BeforeSuite
      public void webdriverSetUp() {
       if(browser=="firefox"){
            WebDriver driver=new FirefoxDriver();
        } else if(browser=="chrome"){
            WebDriver driver=new ChromeDriver();
        } else if(browser=="ie"){
            WebDriver driver=new InternetExplorerDriver();
        } else{
            WebDriver driver=new FirefoxDriver();
        }
      }

      //call getDriver() in your tests  
      public static WebDriver getDriver() {
        return driver;
      }
    }

只是别忘了你可能会想清除测试方法之间的所有cookie

没有任何内容分配给
实用程序.driver
,因此将其传递给closeDriver时为空。您应该检查静态变量和与类变量同名的局部变量的用法。@Saket..cn您编写了一些代码来分配实用程序中的驱动程序..我知道您要求我在实用程序中创建一个构造函数。。此外,如果我想在这里使用“this”关键字,它会有帮助吗?我们如何应用它。。