如何在带有TestNG的selenium WD中使用一个登录测试用例运行多个测试用例

时间:2015-08-07 12:30:30

标签: java selenium gmail

您好我有三个课程文件。在头等舱中,只有一个测试用例用于登录 Gmail 帐户。其余类只有一个测试用例,两者都用于导航收件箱和已发送的项目。我创建了testng.xml来运行这些多个类。现在问题是当第一堂课正在执行时,我可以登录 Gmail 帐户。但是当涉及到二等,我无法导航到收件箱,因为我没有在第2课和第3课中执行登录操作。

所以它给我一个错误Null Pointer Exception。我知道我得到这个例外的原因。但我想只执行一次登录操作,但它应该可用于所有类,这意味着当我要执行第2类和第3类时,它不应该抛出错误。它应该继续从1级开始。我如何才能完成这项任务。

我google了很多。他们都没有帮助我。如果你有,请建议我。我也试过扩展我的班级。我没有结果。请指导我在哪里挣扎?

以下是我的testng.xml

<suite name="MynaTestCase">

    <test name="order">
        <classes>

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

以下是登录代码

@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();
    }

这是Inbox.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();
    }

1 个答案:

答案 0 :(得分:0)

问题是您在Login类中定义了WebDriver,因此收件箱类不会看到它。 要解决这个问题,请创建一个抽象类,其中包括BeforeSuiteAfterSuite类,并使用它扩展每个测试类。

抽象类

public class MyAbstractClass
{
  public WebDriver driver;

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

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

测试类

public class MyTestClass extends MyAbstractClass
{
  @Test
  public void myTest() {
    this.driver.get("http://google.com");
  }
}