Я столкнулся с ошибкой «несоответствие типа аргумента» при попытке передать несколько значений из таблицы Excel с использованием класса @dataprovider нескольким методам в классе объектов страницы. В свою очередь, эти методы вызываются в классе @test. Не могли бы вы помочь мне в этом вопросе. Код был упомянут ниже.

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);
			}
		}
		
	}

Тестовый класс

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);

  }

}

Ошибка:

ОТКАЗ: eCommerceProduct (2.0, «Волшебная мышь», 1.0, «150 долларов США», «150 долларов США») java.lang.IllegalArgumentException: несоответствие типа аргумента в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl (Неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (Неизвестный источник) в java.lang.reflect.Method.invoke (Неизвестный источник)

1
Chetan_K 6 Сен 2016 в 10:10

3 ответа

Лучший ответ

ОТКАЗ: eCommerceProduct (2.0, «Magic Mouse», 1.0, «150 долларов США», «150 долларов США») java.lang.IllegalArgumentException: несоответствие типа аргумента

На самом деле в методе eCommerceProduct() вы ожидаете, что аргументы будут такими: int, String, int, String, String, а фактические аргументы передаются как { {X6}}, String, double, String, String.

Поэтому вам следует изменить метод eCommerceProduct() с ожидаемыми аргументами как: -

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

Отредактировано : -

Выполняется: C: \ Users \ chetan.k.thimmanna \ AppData \ Local \ Temp \ testng-eclips‌ e - 1620381105 \ testng‌ -customsuite.xml 1 НЕ ВЫПОЛНЕНО: eCommerceProduct (2, "Magic Mouse", 1, "150 долларов США "," 150 долларов ") java.lang.NullPointerException в qaToolsECommerceExcel.QaToolsECommercePageObjects.setBrowser‌ (QaToolsECommercePag‌ eObjects.java:42)

Эта ошибка возникла из-за того, что вы вызываете QaToolsECommercePageObjects.setBrowser(browser); внутри метода eCommerceProduct() с передачей значения browser в int или double в то время как в методе QaToolsECommercePageObjects.setBrowser(int browser), который вы сравниваете это как if(browser == '1') означает неправильную строку.

Вам следует изменить свой метод QaToolsECommercePageObjects.setBrowser(int browser), как показано ниже: -

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);
    }
 -----
 -----
}
1
Saurabh Gaur 6 Сен 2016 в 11:49

В вашей функции поставщика данных productInfoDataprovider () у вас есть

  obj[i][0]= row.getCell(0).getNumericCellValue();
  obj[i][2]= row.getCell(2).getNumericCellValue();

GetNumericCellValue () имеет возвращаемый параметр как double, из-за чего вы получаете несоответствие типа аргумента.

Введите преобразование в int, используя

  obj[i][0]= (int)row.getCell(0).getNumericCellValue();
  obj[i][2]= (int)row.getCell(2).getNumericCellValue();
1
Amanpreet Kaur 6 Сен 2016 в 09:32

Когда вы запускаете браузер, вы написали «else if (browser == '2')». Здесь вы ожидаете 2 как символа, но вы доказываете данные как int / Double. Пытаться

else if(browser == 2 )

Перед этим преобразуйте двойное значение переменной браузера в целое число.

1
Sandipan Pramanik 7 Сен 2016 в 04:06