Comment exécuter plusieurs cas de test avec un cas de test de connexion dans selenium WD avec TestNG


Salut j'ai trois fichiers de classe. En première classe, un seul cas de test est utilisé pour le compte login Gmail . le reste des classes n'ayant qu'un seul cas de test et les deux sont utilisés pour naviguer dans Inbox et les éléments envoyés. J'ai créé testng.xml pour exécuter ces plusieurs classes. Maintenant, le problème est que lorsque la première classe est en cours d'exécution, je pourrais me connecter au compte Gmail. Mais en ce qui concerne la deuxième classe, je ne peux pas naviguer vers Boîte de réception car je n'ai pas effectué d'opération de connexion dans classe 2 et classe 3.

Donc cela m'a jeté une erreur Null Pointer Exception. Je connais la raison pour laquelle j'obtiens cette exception. Mais je veux effectuer une action de connexion une seule fois, mais elle devrait être disponible pour toutes les classes, ce qui signifie que lorsque je vais exécuter les classes 2 et 3, elle ne devrait pas générer d'erreur. Il devrait continuer à partir de la classe 1. Comment je peux réaliser cette tâche.

J'ai beaucoup googlé. Aucun d'eux ne m'a aidé. Veuillez me suggérer n'importe quelle idée si vous avez. J'ai essayé de prolonger ma classe aussi. J'ai eu pas de résultat. Veuillez me guider où je me bats?

Voici mon testng.xml

<suite name="MynaTestCase">

    <test name="order">
        <classes>

            <class name="myPackage.Login" />
            <class name="myPackage.Inbox" />
            <class name="myPackage.SentItems" />
        </classes>
    </test> 
</suite>

Voici le Code de Connexion

@BeforeSuite(alwaysRun = true)
    public void setup(){
        System.setProperty("webdriver.chrome.driver", "/home/vadmin/workspace/samplepjt/lib/chromedriver");
        driver = new ChromeDriver();
        baseUrl = "http://www.google.com";
        driver.get(baseUrl+"/");
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        System.out.println("Before suite executed");
    }

@Test
    public void LoginTest(){
         driver.findElement(By.cssSelector("i.fa.fa-user-secret")).click();
         driver.findElement(By.id("user_username")).clear();
         driver.findElement(By.id("user_username")).sendKeys(username);
         driver.findElement(By.id("user_password")).clear();
         driver.findElement(By.id("user_password")).sendKeys(password);
         driver.findElement(By.id("signInButton")).click();
    }

Voici la Boîte de réception.Java

@Test

    public void testcase1()
    {
        driver.findElement(By.xpath("html/body/div[1]/div[2]/div/div/div/div[1]/div[4]/ul/li[8]/a/div/p")).click();
        Assert.assertEquals(driver.findElement(By.xpath("html/body/div[1]/div[2]/div/div/div/div[2]/div/h4")).getText(), "Sections");

        driver.findElement(By.name("commit")).click();

        driver.findElement(By.xpath(".//*[@id='new_section']/div[3]/input")).submit();
    }
Author: Anitha, 2015-08-07

1 answers

Le problème est que vous avez défini votre WebDriver dans la classe Login, donc la classe Inbox ne le verra pas. Pour le résoudre, créez une classe abstraite, qui inclut les classes BeforeSuite et AfterSuite et étendez chaque classe de test avec elle.

Classe Abstraite

public class MyAbstractClass
{
  public WebDriver driver;

  @BeforeSuite
  public void beforeSuite() {
    //...
    this.driver = new ChromeDriver();
    //...
  }

  @AfterSuite
  public void afterSuite() {
    //...
    this.driver.quit();
    //...
  }
}

Une Classe De Test

public class MyTestClass extends MyAbstractClass
{
  @Test
  public void myTest() {
    this.driver.get("http://google.com");
  }
}
 0
Author: peetya, 2015-08-07 13:06:55