当前位置: 首页 > 知识库问答 >
问题:

获取TestNG中方法调用的NullPointerException

罗乐意
2023-03-14

我是Selenium的新手,并编写了以下代码以从ITestContext组中获取参数。

 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.ITestContext;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;

public class ITestGroupism {
WebDriver driver;

  @BeforeTest(groups={"A","B"})
  public void setup()
  {
      System.setProperty("webdriver.chrome.driver", "E:\\Automation Jars\\chromedriver_win32\\chromedriver.exe");
      driver = new ChromeDriver();  
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      driver.get("https://www.google.co.in");
  }     

  @Test(dataProvider="SearchProvider", groups="A")
  public void testMethodA(String author, String searchKey) throws InterruptedException 
  { 
      WebElement searchText = driver.findElement(By.id("sb_ifc0"));
      Actions actions = new Actions(driver);
      actions.moveToElement(searchText);
      actions.click();
      actions.sendKeys(searchKey);
      actions.build().perform();
      System.out.println("Welcome ->"+author+" Your search key is "+searchKey);
      driver.navigate().back();
      driver.navigate().forward();
      System.out.println("thread will sleep now");
      Thread.sleep(2000);     
      }

     @Test(dataProvider="SearchProvider", groups="B")
     public void testMethodB(String searchKey) throws InterruptedException
     {
         WebElement searchText = driver.findElement(By.id("sb_ifc0"));
          Actions actions = new Actions(driver);
          actions.moveToElement(searchText);
          actions.click();
          actions.sendKeys(searchKey);
          actions.build().perform();
          //searchText.sendKeys(searchKey);
          System.out.println("Welcome Professor"+"Your search key is "+searchKey);
          driver.navigate().back();
          driver.navigate().forward();
          System.out.println("thread will sleep now");
          Thread.sleep(2000);              
     }

     @DataProvider(name="SearchProvider")
     public Object[][] ff(ITestContext c)
     {
     Object[][] groupArray =null;
     for(String group : c.getIncludedGroups())
     {
        if(group.equalsIgnoreCase("A"))
        {
            groupArray = new Object[][]
            {
            {"Aakash", "India"},
             {"Aayush", "US"},
             {"Raveena", "UK"}               
            };
            break;
         }else if(group.equalsIgnoreCase("B"))
         {
            groupArray= new Object[][]
               {
                 {"Canada"},
                 {"New Zealand"},
                 {"Russia"}              
               };
             }break;
     }
     return groupArray;
    }
}

跳过:testMethodA java.lang.NullPoInterException(位于org.testng.internal.methodInvocationHelper.InvokedDataProvider(MethodInvocationHelper.java:151)(位于org.testng.internal.parameters.handleParameters(Parameters.java:430)(位于org.testng.internal.invoker.handleParameters(Invoker.java:1243)(位于org.testng.internal.invoker.createParameters(Invoker.java:992)Uiterunnerworker.run(suiterunnerworker.java:86)在org.testng.testng.runsuites(testng.java:1225)在org.testng.testng.runsuites(testng.java:1150)在org.testng.testng.runsuites(testng.java:1075)在org.testng.testng.run(testng.java:1047)在org.testng.remote.abstractremotetestng.run(

跳过:testMethodB java.lang.NullPointerException位于....

共有1个答案

章宏峻
2023-03-14

在使用组时,需要在XML文件中定义这些组。

<suite name="Group Suite" verbose="1">
<test name="Test">
<groups>
  <run>
    <include name="A" />
    <include name="B" />
  </run>
</groups>
<classes>
  <class name="fully.qualied.package.ITestGroupism" />
 </classes>
 </test>
</suite>

更新的代码:

    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.annotations.BeforeTest;
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;

    import java.io.File;
    import java.lang.reflect.Method;
    import java.util.concurrent.TimeUnit;

    public class ITestGroupism {
        WebDriver driver;

        @BeforeTest(groups = {"A", "B"})
        public void setup() {
            System.setProperty("webdriver.chrome.driver", new File("src/test/resources/driver/chromedriver")
                    .getAbsolutePath());
            driver = new ChromeDriver();
            driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
            driver.get("https://www.google.co.in");
        }

        @Test(dataProvider = "SearchProvider", alwaysRun = true, groups = "A")
        public void testMethodA(String author, String searchKey) throws InterruptedException {
            WebElement searchText = driver.findElement(By.id("sb_ifc0"));
            Actions actions = new Actions(driver);
            actions.moveToElement(searchText);
            actions.click();
            actions.sendKeys(searchKey);
            actions.build().perform();
            System.out.println("Welcome ->" + author + " Your search key is " + searchKey);
            driver.navigate().back();
            driver.navigate().forward();
            System.out.println("thread will sleep now");
            Thread.sleep(2000);
        }

        @Test(dataProvider = "SearchProvider", alwaysRun = true, groups = "A")
        public void testMethodB(String searchKey) throws InterruptedException {
            WebElement searchText = driver.findElement(By.id("sb_ifc0"));
            Actions actions = new Actions(driver);
            actions.moveToElement(searchText);
            actions.click();
            actions.sendKeys(searchKey);
            actions.build().perform();
            //searchText.sendKeys(searchKey);
            System.out.println("Welcome Professor" + "Your search key is " + searchKey);
            driver.navigate().back();
            driver.navigate().forward();
            System.out.println("thread will sleep now");
            Thread.sleep(2000);
        }

        @DataProvider(name = "SearchProvider")
        public Object[][] ff(Method method) {
            Object[][] groupArray = null;
            if (method.getName().equalsIgnoreCase("testMethodA")) {
                groupArray = new Object[][]
                        {
                                {"Aakash", "India"},
                                {"Aayush", "US"},
                                {"Raveena", "UK"}
                        };
            } else if (method.getName().equalsIgnoreCase("testMethodB")) {
                groupArray = new Object[][]
                        {
                                {"Canada"},
                                {"New Zealand"},
                                {"Russia"}
                        };
            }
            return groupArray;
        }
    }
 类似资料:
  • 我在一个公共类中有以下构造函数: 和变量在类中定义,该类对其进行了扩展。 当使用执行它时,我会得到以下错误消息。 将其设置为静态的,或者向类中添加一个无参数的构造函数 抛出com.hp.lft.sdk.GeneralleanFTException,java.lang.InterruptedException:将其设置为静态,或者在org.testng.internal.utils.CheckIns

  • 问题内容: 我想得到调用方法。 不是 方法的名称。 这是一个如何获取调用方类的示例。 仅用于测试目的! 问题答案: 如果仅用于测试,则可能有效。它假定可以通过调用类的类访问类文件,并且类文件已使用调试符号进行编译(我希望它们用于测试!)。此代码依赖于ASM字节码库。

  • 问题内容: Python:如何在被调用方法中获取调用者的方法名称? 假设我有2种方法: 如果我不想对method1进行任何更改,如何在method2中获取调用者的名称(在本示例中,名称为method1)? 问题答案: inspect.getframeinfo和其他相关功能可以帮助: 该自省旨在帮助调试和开发;建议不要将其用于生产功能。

  • 问题内容: Python:如何在被调用方法中获取调用者的方法名称? 假设我有2种方法: 如果我不想对method1进行任何更改,如何在method2中获取调用方的名称(在本示例中,名称为method1)? 问题答案: 和其他相关功能可以帮助: 该自省旨在帮助调试和开发;建议不要出于生产功能目的而依赖它。

  • 本文向大家介绍ASP.NET中实现获取调用方法名,包括了ASP.NET中实现获取调用方法名的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ASP.NET中实现获取调用方法名的技巧。分享给大家供大家参考。具体实现方法如下: 在写记录日志功能时,需要记录日志调用方所在的模块名、命名空间名、类名以及方法名,想到使用的是反射(涉及到反射请注意性能),但具体是哪一块儿还不了解,于是搜索,整理如下:

  • 从逻辑上讲,调用< code>wait方法的线程应该已经获得了正在调用< code>wait的对象的固有锁。 oracle教程中提到“在对象的同步方法中调用< code>wait是获取内部锁的一种简单方法”,这意味着至少还有另一种方法可以获取锁。 我的问题是,为了调用< code>wait,除了在synchronized方法内部调用< code>wait之外,还有其他方法可以获取内部锁吗?...它