当前位置: 首页 > 知识库问答 >
问题:

将驱动程序对象的单个实例传递给所有其他类(Testng框架)

何峰
2023-03-14

我在类Sample中初始化了一个驱动程序对象,我也想将该驱动程序对象传递给其他类,但我得到了一个空指针异常。我的代码是

示例类

    public class sample {

    WebDriver driver ;


    @Test(priority=1)

    public void openbrowser(){


        System.setProperty("webdriver.chrome.driver",
                "/home/ss4u/Desktop/Vignesh/jars/chromedriver");

        driver = new ChromeDriver();

        driver.get("http://www.google.com");

        System.out.println(driver instanceof WebDriver);


    }
   @Test(priority=2)
   public void maximize(){

      driver.manage().window().maximize();

   }
   @Test(priority=3)
   public void transfer_instance(){

       sampleone obj=new sampleone(driver);


   }

}

桑普莱克拉松

public class sampleone {

    WebDriver driver;

    public sampleone(WebDriver driver){

        this.driver=driver;

        System.out.println(driver instanceof WebDriver);

        System.out.println(this.driver instanceof WebDriver);

        System.out.println("constructor2");


    }

  public sampleone(){

        System.out.println("Default constructor called");


    }


    @Test(priority=1)

     public void gettitle(){

          System.out.println(this.driver instanceof WebDriver);

          System.out.println(driver instanceof WebDriver);

          String title=this.driver.getTitle();

          System.out.println(this.driver instanceof WebDriver);

          System.out.println(title);

          Assert.assertEquals(title, "Google");

        }

    @Test(priority=2)

    public void navigate(){

        this.driver.get("https:in.yahoo.com");

    }

}

Testng xml文件

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="TestNG" verbose="1" >

    <test name="sample test">
    <classes>
      <class name="testsample.sample" />
    </classes>
    </test>

    <test name="sample testone">
    <classes>
      <class name="testsample.sampleone" />
    </classes>
    </test>

</suite>

共有1个答案

淳于知
2023-03-14

我自己找到了一个解决方案...当我详细阅读testng时,我发现testng xml文件调用xml文件中指定的所有类的默认构造函数。因此,即使我们将对象传递给另一个类,我们也不能通过对象执行操作,所以会发生空指针异常。....我找到了两个解决方案,第一个是使用pagefactory,第二个是为测试套件使用公共驱动程序类...这样我们就可以在所有类中使用相同的驱动程序实例

通用驱动程序类

public class Driver {

    public static WebDriver driver=null;



    public static WebDriver startdriver(String browser){


        if(browser.equalsIgnoreCase("Chrome")){

        System.setProperty("webdriver.chrome.driver", "/home/vicky/Documents/Jars/chromedriver");

        driver=new ChromeDriver();

        }else if(browser.equals("Firefox")){

        driver=new FirefoxDriver();

        }
        return driver;

        }

    }
 类似资料:
  • 我无法将驱动程序/对象传递到下一个类/页,并且在第一个/开始类中具有相同的NullPointerException。 PageObject类-SearchResultsPage: PageObject类主页: 测试等级: 我有两个问题: 1.当我运行测试检查IsHomePage()-FAILS(NullPointerExcema)和ChangeMoney cy()PASS。我不知道为什么第一次测试

  • 问题内容: 我有两节课。和。 我有一个要在中使用的功能。我当时正在考虑将的引用传递给的构造函数,然后再调用该函数。 那行得通吗?有人可以给我举个例子吗? 提前致谢! 问题答案: 是的,它将起作用。这是一种不错的方法。您只需传递A类的 实例 : 然后您可以拥有:

  • 问题内容: 我正在尝试禁用Chrome控制台的输出。如果我通过–start-maximized选项,则可以正常工作。我可能输入了错误的命令? 我也试过 输出量 已启动的ChromeDriver端口= 26703版本= 23.0.1240.0日志= / Brett / workspace / TestNG / chromedriver.log [1214/161331:ERROR:ipc_sync_

  • 问题内容: 我正在尝试禁用Chrome控制台的输出。如果我通过–start-maximized选项,则可以正常工作。我可能输入了错误的命令? 我也试过 输出量 已启动的ChromeDriver端口= 26703版本= 23.0.1240.0 log = / Brett / workspace / TestNG / chromedriver.log [1214/161331:ERROR:ipc_sy

  • 我目前正在开发一个在soapui中维护的测试套件。此测试套件还包含一些web功能测试,这些测试以和

  • 我正在开发一个Android应用程序,它使用两个单例对象:一个用于业务逻辑(类似于MVC中的模型),另一个用于蓝牙连接。一些活动显示数据并需要访问前者,而一个活动允许用户连接/断开连接并需要访问后者。 传递这些对象的首选方式是什么?活动的论据?全局对象?