Chetan_K Chetan_K - 3 months ago 14
Java Question

Getting 'argument type mismatch' error while passing values from a dataprovider class in Selenium

I'm facing 'argument type mismatch' error while trying to pass few values from the excel sheet using @dataprovider class to few methods in page objects class. In turn these methods are called in @test class. Can you please help me on this issue. The code has been mentioned below.

DataProvider



@DataProvider(name="ProductInfo")
public static Object[][] productInfoDataprovider() throws Throwable {

File file = new File("C:/Users/chetan.k.thimmanna/Documents/Selenium/Resources/QAToolsECommerce/ECommerce_Data.xlsx");
FileInputStream fis = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(fis);
XSSFSheet sheet = wb.getSheet("Sheet1");
int lastRowNum = sheet.getLastRowNum();
Object[][] obj = new Object[lastRowNum][5];
for(int i=0; i<lastRowNum; i++){

XSSFRow row = sheet.getRow(i+1);
obj[i][0]= row.getCell(0).getNumericCellValue();
obj[i][1]= row.getCell(1).getStringCellValue();
obj[i][2]= row.getCell(2).getNumericCellValue();
obj[i][3]= row.getCell(3).getStringCellValue();
obj[i][4]= row.getCell(4).getStringCellValue();
}
fis.close();
return obj;
}





PageObjects



public class QaToolsECommercePageObjects {

WebDriver driver;

/*Method to launch the browser and select the browser type */
public void setBrowser(int browser){

if(browser == '1'){
driver = new FirefoxDriver();
}else if(browser == '2'){
System.setProperty("webdriver.chrome.driver", "C:/Users/chetan.k.thimmanna/Documents/Selenium/Resources/chromedriver.exe");
driver = new ChromeDriver();
}else if(browser == '3'){
System.setProperty("webdriver.ie.driver", "C:/Users/chetan.k.thimmanna/Documents/Selenium/Resources/IEDriverServer.exe");
driver = new InternetExplorerDriver();
}
//Maximize the window
driver.manage().window().maximize();

driver.get("http://store.demoqa.com/");
//driver.get("http://toolsqa.com/");

//browser load time
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}




/* Searches the product required to purchase */
public void searchProduct(String product){

driver.findElement(By.name("s")).sendKeys(product);
driver.findElement(By.name("s")).sendKeys(Keys.ENTER);
//driver.findElement(By.linkText("Product Category")).click();
}



/* Verifies the product name in the product search result and adds the product to the cart*/
public void productVerify(String product){

String productValue = driver.findElement(By.id("grid_view_products_page_container")).getText();
boolean val = productValue.contains(product); //Value from excel sheet
if(val == true){

System.out.println("The product searched is found :" +productValue);
//Click on add to cart
driver.findElement(By.name("Buy")).click();
//Click on Go to check out
driver.findElement(By.className("go_to_checkout")).click();
}else
{
System.out.println(" The product searched is not found :" +productValue);
}

}


/* Verifies the product name, quantity, price and total price of the product */

public void checkoutCartVerify(String product, int quantity, String prices, String totalPrices){

WebElement cartTable = driver.findElement(By.className("checkout_cart"));
List<WebElement> cartRows = cartTable.findElements(By.tagName("tr"));

//Product name
WebElement prodRow = cartRows.get(1);
List<WebElement> prodCols = prodRow.findElements(By.tagName("td"));
WebElement prodName = prodCols.get(1);
String oriProdName = prodName.findElement(By.tagName("a")).getText();

//Comparing product name
if(oriProdName.equals(product)){
System.out.println("The Product searched and added to the cart is correct: "+oriProdName);
}else
{
System.out.println("The product searched and added to the cart is incorrect: "+oriProdName);
}


//Quantity
WebElement quantityCombo = prodCols.get(2).findElement(By.tagName("form"));
List<WebElement> quantityVals = quantityCombo.findElements(By.tagName("input"));
String prodQuantity = quantityVals.get(0).getAttribute("value");
int pq = Integer.parseInt(prodQuantity);
//Comparing product quantity
if(pq == quantity){
System.out.println("The Product quantity added to the cart is correct: "+pq);
}else
{
System.out.println("The product quantity added to the cart is incorrect: "+pq);
}

//Price
String price = prodCols.get(3).getText();
String[] priceSplit = price.split("\\.");
String prodPrice = priceSplit[0];
String priceFrac = priceSplit[1];
System.out.println(price);


//Comparing price of the quantity
if(priceFrac.equals("00")){
if(prodPrice.equals(prices)){
System.out.println("The Product price added to the cart is correct: "+prodPrice);
}else{
System.out.println("The product price added to the cart is incorrect: "+prodPrice);
}

}else
{
if(price.equals(prices)){
System.out.println("The Product price added to the cart is correct: "+price);
}else{
System.out.println("The product price added to the cart is incorrect: "+price);
}

}

//Total Price
String totalPrice = prodCols.get(4).getText();
String[] totalpriceSplit = totalPrice.split("\\.");
String prodTotalprice = totalpriceSplit[0];
String prodpriceFrac = totalpriceSplit[1];
System.out.println(totalPrice);

//Comparing Total Price of the quantity
if(prodpriceFrac.equals("00")){
if(prodTotalprice.equals(totalPrices)){
System.out.println("The Product Total price added to the cart is correct: "+prodTotalprice);
}else{
System.out.println("The product Total price added to the cart is incorrect: "+prodTotalprice);
}
}else
{
if(totalPrice.equals(totalPrices)){
System.out.println("The Product Total price added to the cart is correct: "+totalPrice);
}else{
System.out.println("The product Total price added to the cart is incorrect: "+totalPrice);
}
}

}





Test Class



public class QaToolsECommerceTest {
@Test(dataProvider = "ProductInfo", dataProviderClass = QaToolsECommerceDataProvider.class)

public void eCommerceProduct(int browser, String product, int quantity, String prices, String totalPrices) {
QaToolsECommercePageObjects qaEpo = new QaToolsECommercePageObjects();

qaEpo.setBrowser(browser);
qaEpo.searchProduct(product);
qaEpo.productVerify(product);
qaEpo.checkoutCartVerify(product, quantity, prices, totalPrices);

}

}





Error:


FAILED: eCommerceProduct(2.0, "Magic Mouse", 1.0, "$150", "$150")
java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)

Answer

FAILED: eCommerceProduct(2.0, "Magic Mouse", 1.0, "$150", "$150") java.lang.IllegalArgumentException: argument type mismatch

Actually in method eCommerceProduct() you are expecting arguments are as int, String, int, String, String while actual arguments are passing as double, String, double, String, String.

So you should change the method eCommerceProduct() with expecting arguments as :-

public void eCommerceProduct(double browser, String product, double quantity, String prices, String totalPrices) {
   -------
   -------
}

Edited :-

Running: C:\Users\chetan.k.thimmanna\AppData\Local\Temp\testng-eclips‌​e--1620381105\testng‌​-customsuite.xml 1 FAILED: eCommerceProduct(2, "Magic Mouse", 1, "$150", "$150") java.lang.NullPointerException at qaToolsECommerceExcel.QaToolsECommercePageObjects.setBrowser‌​(QaToolsECommercePag‌​eObjects.java:42)

This error occurred because you are calling QaToolsECommercePageObjects.setBrowser(browser); inside eCommerceProduct() method with passing browser value into int or double while in QaToolsECommercePageObjects.setBrowser(int browser) method you are comparing it as if(browser == '1') means in string which is wrong.

You should modify your QaToolsECommercePageObjects.setBrowser(int browser) method as below :-

public class QaToolsECommercePageObjects {

  WebDriver driver;

  public void setBrowser(int browser){
        WebDriver driver
        if(browser == 1){
            driver = new FirefoxDriver();
        }else if(browser == 2){
            System.setProperty("webdriver.chrome.driver", "C:/Users/chetan.k.thimmanna/Documents/Selenium/Resources/chromedriver.exe");
            driver = new ChromeDriver();
        }else if(browser == 3){
            System.setProperty("webdriver.ie.driver", "C:/Users/chetan.k.thimmanna/Documents/Selenium/Resources/IEDriverServer.exe");
            driver = new InternetExplorerDriver();
        }
        //Maximize the window
        driver.manage().window().maximize();

        driver.get("http://store.demoqa.com/");
        //driver.get("http://toolsqa.com/");

        //browser load time
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }
 -----
 -----
}