I saw the error - exception in thread main java lang numberformatexception for input string, what should I do?

526    Asked by ananyaPawar in Cyber Security , Asked on Feb 23, 2022

I am using Selenium Java. I need to add items to the cart and calculate the total price of the items in the cart.

Url: https://rahulshettyacademy.com/seleniumPractise/#/

Issue: My code is giving the following error


Exception in thread "main" java.lang.NumberFormatException: For input string: ""

My code:


String[ ] ItemsNeeded = {"Cucumber","Brocolli","Beetroot" };
addItemsCart (driver,ItemsNeeded);
public static void addItemsCart(WebDriver driver, String [] ItemsNeeded) {
List products = driver.findElements(By.cssSelector("h4.product-name"));
List ItemsNeededList = java.util.Arrays.asList(ItemsNeeded); 
int j = 0;
int CalcTotalPrice = 0;
for (int i=0;i
{
String[] name2 = products.get(i).getText().split("-");
String name3 = name2[0].trim(); 
   if (ItemsNeededList.contains(name3)) 
  {                 
      driver.findElements(By.xpath("//div[@class='product-action']/button")).get(i).click();
System.out.println("Added " + name3 + " to the cart");
String Price1 =driver.findElements(By.xpath("//p[@class='product-price']")).get(i).getText();
int IndPrice1 = Integer.parseInt(Price1);
CalcTotalPrice = CalcTotalPrice + IndPrice1 ;
System.out.println ("Calculated Total Price " +CalcTotalPrice);                 
j++;
       if (j==ItemsNeededList.size())
      {
       break;
      }
    }
}
Xml of one product:
How can I resolve this issue?
Answered by Anisha Dalal

This stack overflow question will help you in knowing how to debug the error - exception in thread main java lang numberformatexception for input string


https://sqa.stackexchange.com/a/43047/40022 The below question helps in understanding difference between gettext and getattribute: How to get text from an element , when getText fails So, in the stack trace, I had at testsuites.test.package.login(test.java:94) so it meant that the error was at line 94 in my test.java file. I checked the line and the code was:

 int IndPrice1 = Integer.parseInt(Price1);
When I debugged Price1 was returning an empty string, and that's why parsing was failing.
So, I checked how you are getting the text, and it was through below locator:
 String Price1 =driver.findElements(By.xpath("//p[@class='product-price']")).get(i).getText();
When I tried, //p[@class='product-price'] in chrome inspect, it was observed that the first element is not actually the first product's displayed price element. But the element that is present in the cart, so the more the items you add the more the element count increases.
So if you add Brinjal - 1 Kg, then the first element found using that locator is not the price displayed for Brocolli, but the price inside the cart, which is brinjal and is not displayed. So getText() won't work
so getText() fails as getText() retrieves only displayed texts. Instead, use:
 String Price1 =driver.findElements(By.xpath("//p[@class='product-price']")).get(i).getAttribute("textContent");
Also, you will always get 120 because your i value is 0,2,3. But it should be 0,1,2 as the elements is added in the order.
Output:
enter image description here
Recommendation:
recommendation always refer the parent element:
so for products: `div.product`
for price `products.get(i).findelement(p.product-price)`
for name `products.get(i).findelement(h4.product-name)`
for action `products.get(i).findelement(button)`

Your Answer

Interviews

Parent Categories