Selenium ChromeDriver对象在多个类中

时间:2016-10-23 10:15:27

标签: java selenium webdriver selenium-chromedriver

我创建了一个主类并启动了chrome驱动程序。我想在多个类中使用相同的驱动程序对象。但我无法这样做。当我运行脚本时,它会抛出NullPointerexception错误。以下是我的2个样本课程。

第1课:

package seleniumWebCmnd;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class DriverConfig {

    public static void main(String[] args) {


        String exePath = "D:\\Sudhakar DND\\Selenium_Eclipse\\JAR files\\chromedriver.exe";
        System.setProperty("webdriver.chrome.driver", exePath);
        WebDriver driver = new ChromeDriver();
        driver.get("http://www.store.demoqa.com");
        driver.manage().window().maximize();
        driver.manage().deleteAllCookies();
        //Exe1.main(args);
        System.out.println("Into Main function");

        Exe1 Ob2 = new Exe1();
        Ob2.page2();
    }

}

那么,如何在下面的类中使用上面创建的Driver对象?

第2课

package seleniumWebCmnd;

import org.openqa.selenium.WebDriver;

public class Exe1 extends DriverConfig {

WebDriver driver;

    public  void page2() {


        String PgTitle=driver.getTitle();
        System.out.println("Into Class 2");
        System.out.println("Page title is :" + PgTitle);

    }

}

以下是eclipse控制台中显示的结果

Starting ChromeDriver 2.16.333243 (0bfa1d3575fc1044244f21ddb82bf870944ef961) on port 20675
Only local connections are allowed.
Into Main function
Exception in thread "main" java.lang.NullPointerException
    at seleniumWebCmnd.Exe1.page2(Exe1.java:30)
    at seleniumWebCmnd.DriverConfig.main(DriverConfig.java:23)
Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook

2 个答案:

答案 0 :(得分:0)

请创建另一个类并在函数中编写Chrome浏览器代码并对其进行扩展以在任何程序中获取该函数

public class OpenBrowser
{
      public void chromeMethod()
      {
        String exePath = "D:\\Sudhakar DND\\Selenium_Eclipse\\JAR files\\chromedriver.exe";
        System.setProperty("webdriver.chrome.driver", exePath);
        WebDriver driver = new ChromeDriver();
      }
}

现在在另一个想要获取驱动程序的类中,只需扩展OpenBrowser类并调用chromeMethod()

public class newMethod extends OpenBrowser
{
  chromeMethod();
  driver.get("http://www.google.com");
  // your statements
} 

答案 1 :(得分:0)

您已在main中创建了driver对象 您必须将driver对象传递给Exel类才能访问它。

但是,您已扩展DriverConfig,因此将代码置于DriverConfig的构造函数中。 driver Exel可以将public class DriverConfig { public WebDriver driver; public DriverConfig() { String exePath = "D:\\Sudhakar DND\\Selenium_Eclipse\\JAR files\\chromedriver.exe"; System.setProperty("webdriver.chrome.driver", exePath); driver = new ChromeDriver(); driver.get("http://www.store.demoqa.com"); driver.manage().window().maximize(); driver.manage().deleteAllCookies(); } public static void main(String[] args) { //Exe1.main(args); System.out.println("Into Main function"); Exe1 Ob2 = new Exe1(); Ob2.page2(); } } 作为成员创建,或者选择像

这样的获取者
class Exe1 extends DriverConfig {

    public void page2() {

        String PgTitle = driver.getTitle();
        System.out.println("Into Class 2");
        System.out.println("Page title is :" + PgTitle);

    }

}

在Exel类中删除变量声明

    // Move out of single and double quotes with `Enter`
    {
        "keys": ["enter"],
        "command": "move",
        "args": {"by": "characters", "forward": true},
        "context": [
            { "key": "following_text", "operator": "regex_match", "operand": "(?:\"|').*", "match_all": true },

            { "key": "preceding_text", "operator": "regex_contains", "operand": "(?:\"|')", "match_all": true }
        ]
    },