【问题标题】:Method error while executing the Testng file执行 Testng 文件时出现方法错误
【发布时间】:2015-10-26 09:31:19
【问题描述】:

我是java初学者。请在下面的代码中帮助我,

@Test(priority=1)
  public void signup(String emailvalue) {
  System.out.println("Page Title: " +driver.getTitle()); 

  driver.findElement(By.id("proprietorName")).sendKeys("Im Owner");

  driver.findElement(By.id("businessName")).sendKeys("Pharmacy By Selenium");

  driver.findElement(By.id("proprietorMobileNo")).sendKeys("1236547890");

  driver.findElement(By.id("website")).sendKeys("http://www.google.com");

  driver.findElement(By.id("businessUserEmail")).sendKeys("emailvalue");

  driver.findElement(By.id("businessUserPassword")).sendKeys("123456");

  driver.findElement(By.id("confirmpass")).sendKeys("123456");

  driver.findElement(By.xpath("//div[@class='col-md-12 mgbt-xs-10 mgtp-20']//div[@class='vd_checkbox']//label[@for='checkbox-2']")).click();

  driver.findElement(By.id("submit-register")).click();

  try
  {
      if(driver.findElement(By.xpath("//div[@class='alert alert-danger vd_hidden']")).isDisplayed())
      {
          driver.findElement(By.id("businessUserEmail")).clear();

          driver.findElement(By.id("businessUserEmail")).sendKeys("emailvalue");

          driver.findElement(By.id("submit-register")).click();
      }

  }
  catch(NoSuchElementException e)
  {
      System.out.println("Given inputs are accepted.");
  }


      switch(emailvalue)
      {   

    case "0": 
          emailvalue = "daniel@xxxx.in";
          break;

    case "1":
          emailvalue = "daniel1@xxxx.in";
          break;

    case "2":
          emailvalue = "daniel2@xxxx.in";
          break;

    case "3":
          emailvalue = "daniel3@xxxx.in";
          break;

    case "4":
          emailvalue = "daniel4@xxxx.in";
          break;      

    case "5":
          emailvalue = "daniel5@xxxx.in";
          break;          

      }

}
  } 

当我执行上面的代码时,我得到了以下错误,

Method signup requires 1 parameters but 0 were supplied in the @Test annotation.
    at org.testng.internal.Parameters.checkParameterTypes(Parameters.java:198)
    at org.testng.internal.Parameters.createParameters(Parameters.java:134)
    at org.testng.internal.Parameters.createParameters(Parameters.java:373)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:450)
    at org.testng.internal.Invoker.handleParameters(Invoker.java:1383)
    at org.testng.internal.Invoker.createParameters(Invoker.java:1075)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1180)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
    at org.testng.TestNG.run(TestNG.java:1057)
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)

【问题讨论】:

  • 你在哪里调用了这个方法?可能是你没有提供论点..
  • 没有..请帮我纠正这个..
  • 您真的需要优先级=1 的@Test(priority=1) 吗?如果不尝试删除 (priority=1) 并让@Test
  • 您必须在某处调用它并传递参数,或者使用数据提供程序或参数化的 testng.xml 为该方法提供参数。你是怎么运行这个的?
  • @bryce,我已经通过删除“优先级”执行了,但仍然是同样的错误。

标签: java class methods parameters testng


【解决方案1】:

您需要将参数传递给测试方法。这可以通过多种方式完成。就像使用 dataprovider 类或使用 testng.xml 运行并作为参数传递一样。你可以像这样创建一个 testng.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<suite allow-return-values="false" configfailurepolicy="skip" data-provider-thread-count="10" group-by-instances="false" junit="false" name="FullSuite" preserve-order="true" skipfailedinvocationcounts="false" thread-count="5" verbose="1">

   <test allow-return-values="false" group-by-instances="false" id="apiversion1" junit="false" name="TestExecutionWithAPIversion1" preserve-order="true" skipfailedinvocationcounts="false">
      <parameter name="emailvalue" value="0"/>
      <classes>
         <class name="com.test.scripts.yourclassnamewithcorrectpackage/>

      </classes>
   </test>
</suite>

然后修改你的方法来读取你传递的参数

@Parameters({ "emailvalue" })
@Test(priority=1)
  public void signup(String emailvalue) {
  System.out.println("Page Title: " +driver.
....


}

然后使用 testng.xml 运行该文件。您可以右键单击转到 runas -> 运行配置 -> 套件 -> 在您的项目中选择 testng.xml。更多详情请阅读this

【讨论】:

  • 我用上面的代码试过了,但是又失败了:(
  • 使用运行,运行配置-> 套件-> 选择了testng.xml org.testng.TestNGException: org.xml.sax.SAXParseException;行号:9;列号:7;与元素类型“null”关联的属性“name”的值不能包含“
  • 我的xml文件..请看
  • 如果我通过 run-> runas -> testng 运行代码,我得到以下结果,方法注册时测试需要参数“emailvalue”,但尚未标记为可选或在 C 中定义: \Users\Beyond\AppData\Local\Temp\testng-eclipse-1285547681\testng-customsuite.xml
猜你喜欢
相关资源
最近更新 更多
热门标签