How to resolve this error - exception in thread "main" java.lang.numberformatexception: for input string: ""
I am using Selenium Java. I need to add items to the cart and calculate the total price of the items in the cart. Issue: My code is giving the following error Exception in thread "main" java.lang.NumberFormatException: For input string: ""
My code:
String[ ] ItemsNeeded = {"Cucumber","Broccoli","Beetroot" };
addItemsCart (driver,ItemsNeeded);
public static void addItemsCart(WebDriver driver, String [] ItemsNeeded) {
Listproducts = driver.findElements(By.cssSelector("h4.product-name"));
ListItemsNeededList = 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 you help me in resolving this issue?
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)`