What should I do when I receive the error - exception in thread main java lang numberformatexception for input string

638    Asked by JohnIngerson in Java , Asked on Oct 11, 2022
Scenario: I am using Selenium Java. I need to add items to the cart and calculate the total price of the items in the cart.
Software Quality Assurance & Testing
Error: Exception in thread "main" java.lang.NumberFormatException: For input string: ""
Asked 1 year, 11 months ago
Modified 1 year, 11 months ago
Viewed 914 times
0
Scenario: 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/#/
enter image description here
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;
      }
    }
}


Can anyone help me in resolving this issue?

Answered by Kylie Hamilton

Regarding the error - exception in thread main java lang numberformatexception for input string


So, in the stack trace, I had

at test suites.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 Broccoli, 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 are added in the order.

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