1

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

DataProvider

@DataProvider(name="ProductInfo") 
 
    public static Object[][] productInfoDataprovider() throws Throwable { 
 
    
 
\t File file = new File("C:/Users/chetan.k.thimmanna/Documents/Selenium/Resources/QAToolsECommerce/ECommerce_Data.xlsx"); 
 
\t FileInputStream fis = new FileInputStream(file); 
 
\t XSSFWorkbook wb = new XSSFWorkbook(fis); 
 
\t XSSFSheet sheet = wb.getSheet("Sheet1"); 
 
\t int lastRowNum = sheet.getLastRowNum(); 
 
\t Object[][] obj = new Object[lastRowNum][5]; 
 
\t for(int i=0; i<lastRowNum; i++){ 
 
\t \t 
 
\t \t XSSFRow row = sheet.getRow(i+1); 
 
\t \t obj[i][0]= row.getCell(0).getNumericCellValue(); 
 
\t \t obj[i][1]= row.getCell(1).getStringCellValue(); 
 
\t \t obj[i][2]= row.getCell(2).getNumericCellValue(); 
 
\t \t obj[i][3]= row.getCell(3).getStringCellValue(); 
 
\t \t obj[i][4]= row.getCell(4).getStringCellValue(); 
 
\t } 
 
\t \t fis.close(); 
 
\t return obj; 
 
    }

PageObjects

public class QaToolsECommercePageObjects { 
 
\t 
 
\t WebDriver driver; 
 
\t 
 
\t /*Method to launch the browser and select the browser type */ 
 
\t public void setBrowser(int browser){ 
 
\t \t 
 
\t \t if(browser == '1'){ 
 
\t \t \t driver = new FirefoxDriver(); 
 
\t \t }else if(browser == '2'){ 
 
\t \t \t System.setProperty("webdriver.chrome.driver", "C:/Users/chetan.k.thimmanna/Documents/Selenium/Resources/chromedriver.exe"); 
 
\t \t \t driver = new ChromeDriver(); 
 
\t \t }else if(browser == '3'){ 
 
\t \t \t System.setProperty("webdriver.ie.driver", "C:/Users/chetan.k.thimmanna/Documents/Selenium/Resources/IEDriverServer.exe"); 
 
\t \t \t driver = new InternetExplorerDriver(); 
 
\t \t } 
 
\t \t //Maximize the window 
 
\t \t driver.manage().window().maximize(); 
 
\t \t 
 
\t \t driver.get("http://store.demoqa.com/"); 
 
\t \t //driver.get("http://toolsqa.com/"); 
 
\t \t 
 
\t \t //browser load time 
 
\t \t driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
 
\t } 
 

 

 

 
\t 
 
\t /* Searches the product required to purchase */ 
 
\t public void searchProduct(String product){ 
 
\t \t 
 
\t \t driver.findElement(By.name("s")).sendKeys(product); 
 
\t \t driver.findElement(By.name("s")).sendKeys(Keys.ENTER); 
 
\t \t //driver.findElement(By.linkText("Product Category")).click(); \t 
 
\t } 
 
\t 
 

 
\t 
 
\t /* Verifies the product name in the product search result and adds the product to the cart*/ 
 
\t public void productVerify(String product){ 
 
\t \t 
 
\t \t String productValue = driver.findElement(By.id("grid_view_products_page_container")).getText(); 
 
\t \t boolean val = productValue.contains(product); //Value from excel sheet 
 
\t \t if(val == true){ 
 
\t \t \t 
 
\t \t \t System.out.println("The product searched is found :" +productValue); 
 
\t \t \t //Click on add to cart 
 
\t \t \t driver.findElement(By.name("Buy")).click(); 
 
\t \t \t //Click on Go to check out 
 
\t \t \t driver.findElement(By.className("go_to_checkout")).click(); \t 
 
\t \t }else 
 
\t \t { 
 
\t \t \t System.out.println(" The product searched is not found :" +productValue); 
 
\t \t } 
 
\t \t 
 
\t } 
 
\t 
 
\t 
 
\t /* Verifies the product name, quantity, price and total price of the product */ 
 
\t 
 
\t public void checkoutCartVerify(String product, int quantity, String prices, String totalPrices){ 
 
\t \t 
 
\t \t WebElement cartTable = driver.findElement(By.className("checkout_cart")); 
 
\t \t List<WebElement> cartRows = cartTable.findElements(By.tagName("tr")); 
 
\t \t 
 
\t \t //Product name 
 
\t \t WebElement prodRow = cartRows.get(1); 
 
\t \t List<WebElement> prodCols = prodRow.findElements(By.tagName("td")); 
 
\t \t WebElement prodName = prodCols.get(1); 
 
\t \t String oriProdName = prodName.findElement(By.tagName("a")).getText(); 
 
\t \t 
 
\t \t //Comparing product name 
 
\t \t if(oriProdName.equals(product)){ 
 
\t \t \t System.out.println("The Product searched and added to the cart is correct: "+oriProdName); 
 
\t \t }else 
 
\t \t { 
 
\t \t \t System.out.println("The product searched and added to the cart is incorrect: "+oriProdName); 
 
\t \t } 
 
\t \t 
 
\t \t 
 
\t \t //Quantity 
 
\t \t WebElement quantityCombo = prodCols.get(2).findElement(By.tagName("form")); 
 
\t \t List<WebElement> quantityVals = quantityCombo.findElements(By.tagName("input")); 
 
\t \t String prodQuantity = quantityVals.get(0).getAttribute("value"); 
 
\t \t int pq = Integer.parseInt(prodQuantity); 
 
\t \t //Comparing product quantity 
 
\t \t if(pq == quantity){ 
 
\t \t \t System.out.println("The Product quantity added to the cart is correct: "+pq); 
 
\t \t }else 
 
\t \t { 
 
\t \t \t System.out.println("The product quantity added to the cart is incorrect: "+pq); 
 
\t \t } 
 
\t \t 
 
\t \t //Price 
 
\t \t String price = prodCols.get(3).getText(); 
 
\t \t String[] priceSplit = price.split("\\."); 
 
\t \t String prodPrice = priceSplit[0]; 
 
\t \t String priceFrac = priceSplit[1]; 
 
\t \t System.out.println(price); 
 
\t \t 
 
\t \t 
 
\t \t //Comparing price of the quantity 
 
\t \t if(priceFrac.equals("00")){ 
 
\t \t \t if(prodPrice.equals(prices)){ 
 
\t \t \t \t System.out.println("The Product price added to the cart is correct: "+prodPrice); 
 
\t \t \t }else{ 
 
\t \t \t \t System.out.println("The product price added to the cart is incorrect: "+prodPrice); 
 
\t \t \t } 
 
\t \t \t 
 
\t \t }else 
 
\t \t { 
 
\t \t \t if(price.equals(prices)){ 
 
\t \t \t \t System.out.println("The Product price added to the cart is correct: "+price); 
 
\t \t \t }else{ 
 
\t \t \t \t System.out.println("The product price added to the cart is incorrect: "+price); 
 
\t \t \t } 
 
\t \t \t 
 
\t \t } 
 
\t \t 
 
\t \t //Total Price 
 
\t \t String totalPrice = prodCols.get(4).getText(); 
 
\t \t String[] totalpriceSplit = totalPrice.split("\\."); 
 
\t \t String prodTotalprice = totalpriceSplit[0]; 
 
\t \t String prodpriceFrac = totalpriceSplit[1]; 
 
\t \t System.out.println(totalPrice); 
 
\t \t 
 
\t \t //Comparing Total Price of the quantity 
 
\t \t if(prodpriceFrac.equals("00")){ 
 
\t \t \t if(prodTotalprice.equals(totalPrices)){ 
 
\t \t \t \t System.out.println("The Product Total price added to the cart is correct: "+prodTotalprice); 
 
\t \t \t }else{ 
 
\t \t \t \t System.out.println("The product Total price added to the cart is incorrect: "+prodTotalprice); 
 
\t \t \t } 
 
\t \t }else 
 
\t \t { 
 
\t \t \t if(totalPrice.equals(totalPrices)){ 
 
\t \t \t \t System.out.println("The Product Total price added to the cart is correct: "+totalPrice); 
 
\t \t \t }else{ 
 
\t \t \t \t System.out.println("The product Total price added to the cart is incorrect: "+totalPrice); 
 
\t \t \t } 
 
\t \t } 
 
\t \t 
 
\t }

Тест Класс

public class QaToolsECommerceTest { 
 
    @Test(dataProvider = "ProductInfo", dataProviderClass = QaToolsECommerceDataProvider.class) 
 
    
 
    public void eCommerceProduct(int browser, String product, int quantity, String prices, String totalPrices) { 
 
\t QaToolsECommercePageObjects qaEpo = new QaToolsECommercePageObjects(); 
 
\t 
 
\t qaEpo.setBrowser(browser); 
 
\t qaEpo.searchProduct(product); 
 
\t qaEpo.productVerify(product); 
 
\t qaEpo.checkoutCartVerify(product, quantity, prices, totalPrices); 
 

 
    } 
 

 
}

Ошибка:

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)

ответ

1

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

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

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

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

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

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)

Эта ошибка возникает, потому что вы вызываете 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); 
    } 
----- 
----- 
} 
+0

Я пробовал вышеуказанное решение, старая ошибка решена. Но теперь я получаю «FAILED: eCommerceProduct (2,« Magic Mouse », 1,« $ 150 »,« $ 150 ») java.lang.NullPointerException '. В листе excel у меня есть только одна строка значений, является ли эта ошибка из-за этого? Пожалуйста, помогите мне. –

+0

Не могли бы вы поделиться полной stacktrace ?? –

+0

[TestNG] Запуск: C: \ Users \ chetan.k.thimmanna \ AppData \ Local \ Temp \ TestNG-затмение - 1620381105 \ TestNG-customsuite.xml FAILED: eCommerceProduct (2, "Magic Mouse" , 1, "$ 150", "150 $") java.lang.NullPointerException \t на qaToolsECommerceExcel.QaToolsECommercePageObjects.setBrowser (QaToolsECommercePageObjects.java:42) \t в qaToolsECommerceExcel.QaToolsECommerceTest.eCommerceProduct (QaToolsECommerceTest.java:13) \t на sun.reflect.NativeMethodAccessorImpl.invoke0 (родной метод) \t at sun.reflect.NativeMethodAccessorImpl.invoke (Неизвестный источник) –

1

В вашей DataProvider функции productInfoDataprovider(), у вас есть

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

getNumericCellValue() имеет параметр возврата в два раза из-за которой вы 'Получается несоответствие типа аргумента.

Тип брось в целое, используя

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

Я попробовал вышеуказанное решение, старая ошибка решена. Но теперь я получаю «FAILED: eCommerceProduct (2,« Magic Mouse », 1,« $ 150 »,« $ 150 ») java.lang.NullPointerException '. В листе excel у меня есть только одна строка значений, является ли эта ошибка из-за этого?Пожалуйста, помогите мне. –

+0

Ничто из вашего условия if if if не проходит, поскольку вы проверяете равенство с '1', '2', '3' (строковые значения). Из-за этого объект драйвера не инициализируется. Таким образом, для объекта драйвера выбрасывается исключение NullpointerException. Измените значения на 1,2,3, а затем добавьте еще один {}, чтобы отобразить сообщение об ошибке или открыть любой веб-драйвер по умолчанию. –

+0

Спасибо за решение, теперь его работа как ожидалось :) –

1

При инициировании браузер, Вы писали «еще если (браузер ==„2“)». Здесь вы ожидаете 2 как символ, но вы подтверждаете данные как int/Double.Попробуйте

else if(browser == 2) 

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

+0

Теперь его работа, спасибо за решение :) –