2017-09-28 19 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」。 –

相關問題