2
有幾個測試使用不同的測試組。我試圖通過在內部使用帶有ITestContext的@DataProvider來運行其中的每個數據集。我得到NullPointerException。這裏是我的代碼:TestNG,ITestContext - getIncludedGroups返回Null
String url = "http://google.com";
FirefoxDriver driver = new FirefoxDriver();
@BeforeTest(groups={"A","B"})
public void launchOfBrowser(){
driver.get(url);
}
@Test(dataProvider="Search", groups="A")
public void searchByUser(String author, String key) throws InterruptedException{
System.out.println("Welcome " + author + ", your search value is: " + key);
String enteredValue;
driver.findElement(By.name("q")).sendKeys(key);
Thread.sleep(3000);
enteredValue = driver.findElement(By.name("q")).getAttribute("value");
Assert.assertEquals(enteredValue, key);
driver.findElement(By.name("q")).clear();
}
@Test(dataProvider="Search", groups="B")
public void searchByIncognito(String key) throws InterruptedException{
System.out.println("Your search value is: " + key);
String enteredValue;
driver.findElement(By.name("q")).sendKeys(key);
Thread.sleep(3000);
enteredValue = driver.findElement(By.name("q")).getAttribute("value");
Assert.assertEquals(enteredValue, key);
driver.findElement(By.name("q")).clear();
}
@AfterTest(groups={"A","B"})
public void closeSessions(){
driver.quit();
}
@DataProvider(name="Search")
public static Object[][] getDataFromDataprovider(ITestContext c){
Object[][] groupArray = null;
for(String group : c.getIncludedGroups()){
if (group.equalsIgnoreCase("A")){
groupArray = new Object[][] {
{ "Guru99", "India" },
{ "Krishna", "UK" },
{ "Bhupesh", "USA" }
};
}
else{
groupArray = new Object[][] {
{ "India" },
{ "UK" },
{ "USA" }
};
}
}
return groupArray;
}
謝謝,夥計。現在一切正常。我還有兩個問題: 1)這是否意味着ITestContext僅適用於.XML?因爲每個方法返回null,甚至getName().. 我可以藉助註釋的優先級參數來控制流量嗎? 2)如果ITestContext是靜態方法的參數,這個靜態方法是帶有測試的副類。如何在這種情況下控制流量? – cherevychenkosa
@cherevychenkosa,是的,我們可以這樣做: - 使用** ItestNGMethod **代替ITestContext: - 將以下參數傳遞給方法** getDataFromDataprovider(ITestNGMethod m)**並使用** m.getGroups()** in循環 - 執行它沒有XML,它應該工作。它爲我工作。 –
那麼ITestContext的優勢在哪裏?如果ITestNGMethod更智能.. – cherevychenkosa