2017-09-28 17 views
0

当我运行我的XML第一类正在运行。第一类包含@beforeTest@AfterTest注释。我的@Test注释是在第二课,但它没有运行。testNG XML文件不考虑我的第二类它的运行只有我的第一个类,第二个它的显示java.lang.NullPointerException

<suite name = "smsweb"> 
    <test name = "login"> 
     <classes> 
      <class name = "testNG.datapro" /> //Running 
     </classes> 
    </test> 
    <test name = "form"> 
     <classes>   
      <class name = "testNG.assetscat" /> //not running 
     </classes> 
    </test> 
</suite> 

--1st类 “了DataPro”

package testNG; 

import java.util.Arrays; 
import java.util.List; 
import java.util.concurrent.TimeUnit; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.openqa.selenium.interactions.Actions; 
import org.testng.Assert; 
import org.testng.annotations.AfterTest; 
import org.testng.annotations.BeforeTest; 
import org.testng.annotations.DataProvider; 
import org.testng.annotations.Test; 
import org.testng.asserts.SoftAssert; 

public class datapro { 
    WebDriver driver; 

    @BeforeTest 
    public void webopen() throws InterruptedException { 

     System.setProperty("webdriver.chrome.driver", 
       "C:\\Users\\saad bin usman\\Downloads\\Compressed\\chromedriver_win32_2\\chromedriver.exe"); 
     driver = new ChromeDriver(); 
     driver.manage().window().maximize(); 
     Actions a = new Actions(driver); 
     driver.get("http://test.com/"); 
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

     SoftAssert softassert = new SoftAssert(); 

     String title = driver.getTitle(); 
     String exptitle = "Cloud Tenants - Sales Management System"; 

     String user = "admin"; 
     String pass = "admin"; 

     Assert.assertEquals(title, exptitle); 

     String url = driver.getCurrentUrl(); 

     driver.findElement(By.xpath(".//*[@id='txtUsername']")).clear(); 
     driver.findElement(By.xpath(".//*[@id='txtUsername']")).sendKeys(user); 

     driver.findElement(By.xpath(".//*[@id='txtPassword']")).clear(); 
     driver.findElement(By.xpath(".//*[@id='txtPassword']")).sendKeys(pass); 

     Thread.sleep(3000); 
     driver.findElement(By.xpath(".//*[@id='section-login']/div/div/div[4]/button")).click(); 
     Thread.sleep(4000); 

     String expectedurl = driver.getCurrentUrl(); 
     Assert.assertNotEquals(url, expectedurl); 

     String formname = "asset group"; 
     Thread.sleep(6000); 
     driver.findElement(By.xpath(".//div[@class='sidebar-toggler hidden-phone']")).click(); 
     driver.findElement(By.xpath(".//*[@id='txtMenuSearch']")).clear(); 
     driver.findElement(By.xpath(".//*[@id='txtMenuSearch']")).sendKeys(formname); 
     Thread.sleep(2000); 
     WebElement searcharea = driver.findElement(By.xpath(".//ul[@class='page-sidebar-menu']")); 
     WebElement abc = searcharea.findElement(By.tagName("ul")); 
     List<WebElement> xyz = abc.findElements(By.tagName("a")); 

     System.out.println("No of Count Related Your Search " + xyz.size()); 
     int count = 0; 
     for (int i = 0; i < xyz.size(); i++) { 
      if (formname.equalsIgnoreCase(xyz.get(i).getText())) { 
       System.out.println("Form Name Which System Open " + xyz.get(i).getText()); 
       count++; 
       xyz.get(i).click(); 
       break; 
      } 
     } 
     if (count < 1) { 
     } 

     WebElement formpagename = driver 
       .findElement(By.xpath(".//div[@class='portlet-title']/div[@class='caption span6 text-left']")); 
     softassert.assertEquals(formpagename.getText().equalsIgnoreCase(formpagename.getText()), 
       formname.equalsIgnoreCase(formpagename.getText())); 

     Thread.sleep(5000L); 
     try { 
      driver.findElement(By.xpath(".//*[@id='btnAddRecord']/i")).click(); 
      softassert.assertEquals(formpagename.getText().equalsIgnoreCase(formpagename.getText()), 
        formpagename.getText().equalsIgnoreCase(formpagename.getText())); 
     } catch (Exception e) { 
      System.out.println("Add New Record's Button Not Found"); 
     } 
     softassert.assertAll(); 
     Thread.sleep(8000L); 
    } 

    @AfterTest 
    public void closebrowser() { 
     driver.quit(); 
    } 

--2nd类 “assetscat”

package testNG; 

import java.util.List; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebElement; 
import org.testng.annotations.Test; 
import org.testng.asserts.SoftAssert; 

public class assetscat { 

    @Test(priority = 1) 
    public void entername() throws InterruptedException { 
     datapro d = new datapro(); 
     SoftAssert sa = new SoftAssert(); 

     d.driver.findElement(By.xpath(".//*[@id='btnAddEditSave']")).click(); 
     d.driver.findElement(By.xpath(".//*[@class='icon-remove-circle']")).click(); 

     System.out.println(d.driver 
       .findElement(By.xpath(".//*[@id='frmAddEdit']//div[@class='control-group required error']")).getText()); 

     // WebElement notisyb 
     // =d.driver.findElement(By.xpath(".//*[@id='errorNotificationBtn']")); 
     // System.out.println(notisyb.getText()); 

     List<WebElement> errorelement = d.driver.findElements(By.xpath(
       ".//*[@id='frmAddEdit']//div[@class='control-group required error']/div/*[@data-dbpropertyname]")); 
     System.out.println("Mendatory Fields are "); 
     for (int er = 0; er < errorelement.size(); er++) { 
      System.out.println(errorelement.get(er).getAttribute("data-dbpropertyname")); 
     } 
     for (int e = 0; e < errorelement.size(); e++) { 

      // System.out.println(errorelement.get(e).getAttribute("data-dbpropertyname")); 

      if (errorelement.get(e).getAttribute("data-dbpropertyname").equalsIgnoreCase("Name")) { 

       WebElement savebut = d.driver.findElement(By.xpath(".//*[@id='btnAddEditSave']")); 

       errorelement.get(e).sendKeys("   "); 
       savebut.click(); 
       WebElement notipannel = d.driver.findElement(By.xpath(".//*[@class='icon-remove-circle']")); 
       if (notipannel.isDisplayed()) { 
        notipannel.click(); 
       } 

       List<WebElement> cond1 = d.driver.findElements(By.xpath(
         ".//*[@id='frmAddEdit']//div[@class='control-group required error']/div/*[@data-dbpropertyname]")); 

       sa.assertEquals(errorelement.size(), cond1.size()); 

       errorelement.get(e).clear(); 
       errorelement.get(e).sendKeys("@#$%^"); 
       savebut.click(); 
       if (notipannel.isDisplayed()) { 
        notipannel.click(); 
       } 

       List<WebElement> cond2 = d.driver.findElements(By.xpath(
         ".//*[@id='frmAddEdit']//div[@class='control-group required error']/div/*[@data-dbpropertyname]")); 

       sa.assertEquals(errorelement.size(), cond2.size()); 

       errorelement.get(e).clear(); 
       errorelement.get(e).sendKeys("CHaracter20000CHaracter20000CHaracter20000CHaracter20000CHaracter20000"); 
       savebut.click(); 
       if (notipannel.isDisplayed()) { 
        notipannel.click(); 
       } 

       List<WebElement> cond3 = d.driver.findElements(By.xpath(
         ".//*[@id='frmAddEdit']//div[@class='control-group required error']/div/*[@data-dbpropertyname]")); 

       sa.assertEquals(errorelement.size(), cond3.size()); 
       sa.assertAll(); 

       if (notipannel.isDisplayed()) { 
        notipannel.click(); 
       } 
       try { 
        WebElement datasave = d.driver.findElement(By.xpath(".//*[@class='notification alert-success']")); 
        if (datasave.isDisplayed()) { 
         System.out.println("Afetr Enter " + errorelement.get(e).getAttribute("data-dbpropertyname") 
           + " Transaction Sucussfully Saved"); 
         break; 

        } 
       } catch (Exception e1) { 
        System.out.println("After Enter " + errorelement.get(e).getAttribute("data-dbpropertyname") 
          + " Transaction not Saved"); 
       } 

      } 

      else if (errorelement.get(e).getAttribute("data-dbpropertyname").equalsIgnoreCase("ShortName")) { 
       errorelement.get(e).clear(); 
       errorelement.get(e).sendKeys("Sadi"); 
       d.driver.findElement(By.xpath(".//*[@id='btnAddEditSave']")).click(); 

       WebElement notipannel = d.driver.findElement(By.xpath(".//*[@class='icon-remove-circle']")); 
       if (notipannel.isDisplayed()) { 
        notipannel.click(); 
       } 
       try { 
        WebElement datasave = d.driver.findElement(By.xpath(".//*[@class='notification alert-success']")); 
        if (datasave.isDisplayed()) { 
         System.out.println("Afetr Enter " + errorelement.get(e).getAttribute("data-dbpropertyname") 
           + " Transaction Sucussfully Saved"); 
         break; 

        } 
       } catch (Exception e1) { 
        System.out.println("After Enter " + errorelement.get(e).getAttribute("data-dbpropertyname") 
          + " Transaction not Saved"); 
       } 

      } 

      else if (errorelement.get(e).getAttribute("data-dbpropertyname").equalsIgnoreCase("Colorcode")) { 

       errorelement.get(e).sendKeys("Black"); 
       d.driver.findElement(By.xpath(".//*[@id='btnAddEditSave']")).click(); 

       WebElement notipannel = d.driver.findElement(By.xpath(".//*[@class='icon-remove-circle']")); 
       if (notipannel.isDisplayed()) { 
        notipannel.click(); 
       } 
       try { 
        WebElement datasave = d.driver.findElement(By.xpath(".//*[@class='notification alert-success']")); 
        if (datasave.isDisplayed()) { 
         System.out.println("Afetr Enter " + errorelement.get(e).getAttribute("data-dbpropertyname") 
           + " Transaction Sucussfully Saved"); 
         break; 

        } 
       } catch (Exception e1) { 
        System.out.println("After Enter " + errorelement.get(e).getAttribute("data-dbpropertyname") 
          + " Transaction not Saved"); 
       } 

      } 

     } 
    } 

} 

回答

0

TestNG的保证,一个@BeforeTest批注的方法得到每<test>标签只执行一次。您没有向我们展示您的测试代码。但是,根据你的描述,我猜测你的两个测试类都有@Test方法,这些方法依赖于一个变量,这个变量预计会通过@BeforeTest方法初始化,而这个@BeforeTest方法也许是一些通用基类的一部分。

如果你使用的情况下绝对需要初始化做每<test>只有一次,那么你可能要做到以下几点:

移动初始化逻辑,要么

  • org.testng的一部分。 ITestListener - 如果您希望每个测试标签仅执行一次设置(即,而不是使用@BeforeTest)
  • org.testng.ISuiteListener - 如果您希望每个套件标签只执行一次设置(即,而不是使用@BeforeSuite)
  • 使用setAttribute()方法将初始化数据作为ITestContext(表示测试标记)或ISuite(表示套件标记)的属性来持久化。
  • 电线在此侦听到TestNG的通过:
    • 听者标签(或)
    • 的@Listeners注解(或)
    • 服务装载机。

你可以参考我的this博客文章,以获得更多的细节,也为一些样品,显示了这一切。

更新后综观源代码

你已经完全得到了这个错误。实例化一个类和TestNG实例化一个类是有区别的。访问网络驱动器数据成员时,您的assetscat.entername()失败,原因是NullPointerException是因为所有初始化都在webopen()中完成,并且使用@BeforeTest注释。

为了解决这个问题,你有两种选择:

  1. 试图访问它的driver对象之前显式调用该方法webopen()assetscat.entername()方法。
  2. assetscat extends datapro

我还建议您花些时间处理所有这些注释,以更好地了解如何使用它们。

+0

感谢兄弟的关注。我的第一个类包含两个注解,这些是atbeforeTest和atAfterTest,而我的第二个类只包含atTest注解,当我运行我的XML文件时,只有我的第一个类正在运行,当我在第一类中粘贴atTest类时它会工作并且如何向我发送我的代码两个班? –

+0

你还没有向我们展示你的课程是什么样子。没有这个,它很难说。 –

+0

增加了两个类。 –

0

试试这个,它应该工作。

<suite name = "smsweb"> 
    <test name = "login"> 
     <classes> 
      <class name = "testNG.datapro" /> 
     </classes> 
     <classes>   
      <class name = "testNG.assetscat" /> 
     </classes> 
    </test> 
</suite> 
+0

现在一日一还没有运行。 :(当我运行套件它显示错误,并失败。 –

+0

即使我试过但它也不工作。它只运行第一类即“testNG.datapro” \t \t \t \t \t \t <类名= “testNG.datapro”/> \t \t \t <类名= “testNG.assetscat”/> \t \t \t \t

+0

你能告诉我,你如何运行你的套件? –

0

试试这个代码,这将使这两个测试运行

<suite name = "smsweb"> 
    <test name = "login"> 
     <classes> 

      <class name = "testNG.datapro" /> 

      <class name = "testNG.assetscat" /> 
     </classes> 
    </test> 
</suite> 
+0

我已经尝试过,但它不工作。它的唯一运行“testNG.datapro”。 –

相关问题