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

如何在使用TestNG的数据驱动测试中解决methodmatcher异常?

岑明辉
2023-03-14
package testNG;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.ITestResult;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public class Datadriven_testing_in_testNG
{
    public WebDriver driver;
@DataProvider(name="testData")
public  Object[][] readExcel() throws BiffException, IOException 
{

    File f=new File("C:\\Users\\Akshay\\Desktop\\SELENIUM\\Amazon.xls");
    Workbook readwb=Workbook.getWorkbook(f);
    Sheet readsht=readwb.getSheet(0);
    int noofrows=readsht.getRows();
    int noofcolumns=readsht.getColumns();
    String inputData[][]= new String[noofrows-1][noofcolumns];
    int count=0;
    for(int i=1;i<noofrows;i++)
    {
        for(int j=0;j<noofcolumns;j++)
        {
            Cell c=readsht.getCell(j,i);
            inputData[count][j]=c.getContents();
        }
        count++;

    }
    return inputData;


}
@Test(dataProvider="testData")
public static void  login(String uname, String password) throws InterruptedException
{



    //launch chrome
    System.setProperty("webdriver.chrome.driver","C:\\Users\\Akshay\\Desktop\\SELENIUM\\chromedriver.exe");
    WebDriver driver= new ChromeDriver();
    // navigate to url
    driver.get("https://www.amazon.in/");
    //click on sign in
    driver.findElement(By.xpath("(//span[text()='Sign in'])[3]")).click();
    Thread.sleep(5000);
    // to enter user name
    driver.findElement(By.xpath("//input[@name='email']")).sendKeys(uname);
    Thread.sleep(5000);
    //to click continue
    driver.findElement(By.xpath("//input[@id='ap_email']/following::*[9]")).click();
    Thread.sleep(5000);
    //to enter password
    driver.findElement(By.xpath("//input[@id='ap_password']")).sendKeys(password);
    Thread.sleep(5000);
    //to click login button
    driver.findElement(By.xpath("//input[@id='ap_password']/following::*[6]")).click();

   //verification
    String actual=driver.getCurrentUrl();
    String expected="https://www.amazon.in/ap/cvf/request?arb=19308965-aa56-4383-b19a-acc78826528b";
    Assert.assertEquals(actual, expected);
}
@AfterMethod
public void getResult(ITestResult testResult)
{
    System.out.println("Testcase name "+testResult.getName());
    System.out.println("Testcase Result "+testResult.getStatus());
    int status=testResult.getStatus();
    if(status==1){
        driver.close();
    }
    else{
        //take screenshot
        File outfile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        try {
            FileUtils.copyFile(outfile, new File("C:\\Users\\Akshay\\Desktop\\SELENIUM"+testResult.getParameters()[0]+"Defect.jpg"));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    driver.close();
    }

    }

这是我编写的代码,但它显示了dataProvider不匹配错误。我试图搜索解决方案,但无法获得它的错误消息在控制台如下:

失败:登录org.testng.internal.reflect.MethodMatcherException:数据提供程序不匹配方法:登录([参数{index=0,Type=java.lang.String,DeclaredAnnotations=[]},参数{index=1,Type=java.lang.String,DeclaredAnnotations=[]}])参数:[(java.lang.String)Akshaymganapati@gmail.com,(java.lang.String)GSaA2509,(java.lang.String)](位于.privaterun(suiterunner.java:340)在org.testng.suiterunner.java:289)在org.testng.suiterunnerworker.runsuite(suiterunnerworker.java:52)在org.testng.suiter.run(suiterunnerworker.runsuite(suiterunnerworker.java:86)在org.testng.testng.runsuite(suiterunnerworker.runsuite(suiterunnerworker.runsuite)

共有1个答案

松灿
2023-03-14

在测试参数中不使用字符串uname和字符串password,而是使用对象uname和对象password,然后可以将该对象转换为字符串。

 类似资料:
  • 在我的公司,我使用SeleniumWebDriver进行自动化测试来自动化Web应用程序,但我直接使用id、xpath和所有工具,而不遵循任何框架,因此现在我遇到了一些问题,必须设计数据驱动的框架。 请建议我如何在eclipse下设置DatadrivenFramwework。要遵循哪些步骤和所有步骤。 谢谢

  • 问题内容: 我有一系列要在电子商务平台上测试的商店,并且每个商店都具有要针对其自动化测试的一系列属性。是否可以有一个数据提供程序在整个测试套件中提供数据,而不仅仅是在TestNG中提供测试?我试图不使用testNG.xml文件作为机制,因为这些属性直接来自数据库调用。 我需要自动执行以下操作: @Test在当前数据集行中使用用户名和密码登录。 @Test验证StoreName和items-stor

  • 我正在将Grails2中的一系列单元测试升级到Grails3,并在使用Spock数据驱动测试格式驱动测试的域测试中遇到问题。 当我执行测试时,因为测试执行没有填充测试中的错误、字段和val引用。如前所述,这个测试适用于Grails2.5.5,所以我怀疑我缺少了Grails3中需要的一些东西。 Edited:我删除了原来在setup()中的mockForConstraints()调用,使其无效。

  • 编写测试代码时,一个较好的办法是把测试的输入数据和期望的结果写在一起组成一个数据表:表中的每条记录都是一个含有输入和期望值的完整测试用例,有时还可以结合像测试名字这样的额外信息来让测试输出更多的信息。 实际测试时简单迭代表中的每条记录,并执行必要的测试。这在练习 13.4 中有具体的应用。 可以抽象为下面的代码段: var tests = []struct{ // Test table

  • 问题内容: 您如何在jUnit中编写数据驱动的测试? (我的定义)数据驱动测试是一种从某些外部源(文件,数据库等)读取数据,每行/文件/任何内容执行一个测试,并将结果显示在测试运行程序中的测试,就像您进行了单独的测试- 每次运行的结果将单独显示,而不是汇总显示。 问题答案: 在JUnit4中,您可以使用Parameterized testrunner进行数据驱动的测试。 它的文档记录不是很好,但是

  • 使用Selenium,我编写了下面的代码,从Excel表中读取数据,并在电子邮件中键入密码,进入Facebook的登录页面。错误是使用try/catch时未处理的表达式。我如何解决这个问题?