Firefox 在testng套件中运行时,有没有一种方法可以对多个java类使用相同的webdriver对象?

Firefox 在testng套件中运行时,有没有一种方法可以对多个java类使用相同的webdriver对象?,firefox,selenium,webdriver,testng,Firefox,Selenium,Webdriver,Testng,在testng套件中运行时,是否有一种方法可以将同一webdriver对象用于多个测试/类?我的意思是用一个类启动WebDriver实例,但在套件中的后续类/测试中继续使用它 我面临的问题是,10个不同的类都有这样的声明: WebDriver=newfirefoxdriver 即使在我用并行模式将TestNG设置为s false后,它仍然会打开10个不同的实例。它真的占用了我的系统内存 我想找到一个解决方案,使用同一个WebDriver并运行不同的类,而不需要多个浏览器和WebDriver组件。

在testng套件中运行时,是否有一种方法可以将同一webdriver对象用于多个测试/类?我的意思是用一个类启动WebDriver实例,但在套件中的后续类/测试中继续使用它

我面临的问题是,10个不同的类都有这样的声明:

WebDriver=newfirefoxdriver

即使在我用并行模式将TestNG设置为s false后,它仍然会打开10个不同的实例。它真的占用了我的系统内存


我想找到一个解决方案,使用同一个WebDriver并运行不同的类,而不需要多个浏览器和WebDriver组件。

我不确定它在java中是什么,但在c中,您只需将WebDriver实例化为一个字段

private WebDriver driver = new FirefoxDriver();
然后从那个点开始引用驱动程序

driver.findElements(By.TagName('h1'));

我不确定它在java中是什么,但在c中,您只是将webdriver实例化为一个字段

private WebDriver driver = new FirefoxDriver();
然后从那个点开始引用驱动程序

driver.findElements(By.TagName('h1'));

如果要并行运行测试用例,则需要有一个单独的webdriver实例与每个测试关联。不能在多线程环境中跨测试共享实例

至于抽象webdriver实例的初始化,有几种方法。您也许可以编写一个基本的TestCase类来构建webdriver实例。然后,您的每个测试用例将沿着这些线路扩展TestCase类


在TestNG中,可以通过在TestNG.xml中指定参数-threadcount来控制线程数。查看文档。如果以编程方式启动TestNG,那么可以使用setThreadCount方法。检查Java文档

如果要并行运行测试用例,则需要有一个单独的webdriver实例与每个测试关联。不能在多线程环境中跨测试共享实例

至于抽象webdriver实例的初始化,有几种方法。您也许可以编写一个基本的TestCase类来构建webdriver实例。然后,您的每个测试用例将沿着这些线路扩展TestCase类

在TestNG中,可以通过在TestNG.xml中指定参数-threadcount来控制线程数。查看文档。如果以编程方式启动TestNG,那么可以使用setThreadCount方法。检查Java文档

将所有类放在标记中,并在存储在基类中的@BeforeTest方法中初始化驱动程序,以便所有测试方法都可以访问它。

将所有类放在标记中,并在存储在基类中的@BeforeTest方法中初始化驱动程序,以便所有测试方法都可以访问它。

提供很好的处理方法。如果需要,它将创建新实例,否则将使用相同的实例。但是,您不需要为安装和拆卸编写代码。您需要在属性文件中设置浏览器字符串,它将为给定的浏览器字符串管理RC或webdriver。

提供了很好的处理方法。如果需要,它将创建新实例,否则将使用相同的实例。但是,您不需要为安装和拆卸编写代码。您需要在属性文件中设置浏览器字符串,它将管理给定浏览器字符串的RC或webdriver。

在一个包中:

Test1.java->让@BeforeTest和@AfterTest分别启动浏览器和关闭浏览器

例如:

Login.java

公共类登录{

@Test
public static void logintest{

    Webelement ele1 = Test1.driver.findElement(...);
}
}

在XML文件中:

<test name = "MyTest">
    <classes>
        <class name = "Test1"></class>
        <class name = "Login"></class>
    </classes>
</test>
这将利用Test1文件中创建的驱动程序实例

希望有帮助!!:

在一个包中:

Test1.java->让@BeforeTest和@AfterTest分别启动浏览器和关闭浏览器

例如:

Login.java

公共类登录{

@Test
public static void logintest{

    Webelement ele1 = Test1.driver.findElement(...);
}
}

在XML文件中:

<test name = "MyTest">
    <classes>
        <class name = "Test1"></class>
        <class name = "Login"></class>
    </classes>
</test>
这将利用Test1文件中创建的驱动程序实例


希望有帮助!!:

处理此问题的最佳方法是:

有一个只需初始化浏览器的基类

public class BaseClass
{
  public static Webdriver driver;
@BeforeSuite
  public void Launch_Browser()
  {
  webDriver Driver= new FirefoxDriver();
  }
}
然后使用Extend将基类扩展到所有其他类

public class Class1 extends BaseClass
 {
   @Test
    public void TC1()
      {
          //PASS
        }   

 }

等等。重要的是,您应该在基类中将webdriver声明为公共静态

处理此问题的最佳方法是:

有一个只需初始化浏览器的基类

public class BaseClass
{
  public static Webdriver driver;
@BeforeSuite
  public void Launch_Browser()
  {
  webDriver Driver= new FirefoxDriver();
  }
}
然后使用Extend将基类扩展到所有其他类

public class Class1 extends BaseClass
 {
   @Test
    public void TC1()
      {
          //PASS
        }   

 }

等等。重要的是,您应该在基类中将webdriver声明为公共静态

我实现了以下目标:

1:创建了一个启动类

public class Start {
    public static WebDriver wd;

    @BeforeSuite
    public void Setup() {
    System.setProperty "webdriver.chrome.driver","D:\\chromedriver.exe");
    wd = new ChromeDriver();
    wd.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
    wd.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
    wd.manage().window().maximize();
    wd.get("URL");}
    }
2:通过其类限定符引用其他类中的静态驱动程序实例

public void VerifyTitle() {
    Assert.assertEquals(Start.wd.getTitle(), "Title", "Incorrect Title");}
3:在testing.xml文件中添加类和设置方法,如下所示

<suite name="QA">
   <test name="1Class">
      <classes>
         <class name="just.Start">
            <methods>
               <include name="Setup"></include>
            </methods>
         </class>
         <class name="just.LoginPage">
            <methods>
               <include name="VerifyTitle"></include>
            </methods>
         </class>
         <class name="just.HomePage">
            <methods>
               <include name="VerifyUserLogin"></include>           
            </methods>
         </class>

      </classes>
    </test> 
  </suite>    

我已经用Java实现了这一点

我实现了以下目标:

1:创建了一个启动类

public class Start {
    public static WebDriver wd;

    @BeforeSuite
    public void Setup() {
    System.setProperty "webdriver.chrome.driver","D:\\chromedriver.exe");
    wd = new ChromeDriver();
    wd.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
    wd.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
    wd.manage().window().maximize();
    wd.get("URL");}
    }
2:通过其类限定符引用其他类中的静态驱动程序实例

public void VerifyTitle() {
    Assert.assertEquals(Start.wd.getTitle(), "Title", "Incorrect Title");}
3:在testing.xml文件中添加类和设置方法,如下所示

<suite name="QA">
   <test name="1Class">
      <classes>
         <class name="just.Start">
            <methods>
               <include name="Setup"></include>
            </methods>
         </class>
         <class name="just.LoginPage">
            <methods>
               <include name="VerifyTitle"></include>
            </methods>
         </class>
         <class name="just.HomePage">
            <methods>
               <include name="VerifyUserLogin"></include>           
            </methods>
         </class>

      </classes>
    </test> 
  </suite>    

我已经用Java实现了这一点

这不应该是@BeforeClass吗?这取决于您想何时初始化web驱动程序。如果在所有类运行之前只有一次,那么\@BeforeTest。如果是在每次上课之前,那么\@BeforeClass.Hi,我面临着类似的问题。我有多个java文件,它们执行一些测试用例操作。我使用PhantomJSDriver类来实现无头浏览器测试。我有一个类,我使用PhantomJSDriver类的对象从它的静态块初始化。我从一个shell脚本运行了几个测试用例java文件。当我的第一个测试用例运行时,我首先执行登录,但是当我运行第二个测试用例文件时,这个登录不起作用,它再次要求登录。可能是因为PhantomJSDriver对象在第一个java文件完成时被销毁。HelpHello,有人能告诉我如何实现@CedricBeust给出的上述解决方案吗。我面临着同样的问题,我正在使用一个shell脚本运行几个java文件,我唯一需要的是在所有测试用例文件中使用相同的PhantomJSDriver对象,这样一个浏览器实例就可以处理所有测试用例。我该怎么做?请帮助。这不应该是@BeforeClass吗?这取决于您想何时初始化web驱动程序。如果在所有类运行之前只有一次,那么\@BeforeTest。如果是在每次上课之前,那么\@BeforeClass.Hi,我面临着类似的问题。我有多个java文件,它们执行一些测试用例操作。我使用PhantomJSDriver类来实现无头浏览器测试。我有一个类,我使用PhantomJSDriver类的对象从它的静态块初始化。我从一个shell脚本运行了几个测试用例java文件。当我的第一个测试用例运行时,我首先执行登录,但是当我运行第二个测试用例文件时,这个登录不起作用,它再次要求登录。可能是因为PhantomJSDriver对象在第一个java文件完成时被销毁。HelpHello,有人能告诉我如何实现@CedricBeust给出的上述解决方案吗。我面临着同样的问题,我正在使用一个shell脚本运行几个java文件,我唯一需要的是在所有测试用例文件中使用相同的PhantomJSDriver对象,这样一个浏览器实例就可以处理所有测试用例。我该怎么做?请帮忙。