Home > Enterprise >  How can i execute commands based on if the status of the previous one?
How can i execute commands based on if the status of the previous one?

Time:03-10

Basically i have 2 different commands i could possibly execute. If the first one does not work, I want to execute the second command. Is there some easier, cleaner way to do this? What would i even put in the if statement?


try
{ 
    // code that may throw an exception
    driver.findElement(By.id("component-unique-id-31")).click();

}
catch (Exception ex)
{
   // Print to console
}

if(previous command threw an exception){

  try
  { 
     //Another command i want executed if the above fails
     driver.findElement(By.xpath("//h3[normalize-space()='Something']")).click();
       
  }
  catch (Exception ex)
  {
   // handle
  }
}

CodePudding user response:

You can put the second command inside the catch block of the first try-catch, as following:

try
{ 
    // code that may throw an exception
    driver.findElement(By.id("component-unique-id-31")).click();

}
catch (Exception ex1)
{
   try
   { 
       //Another command i want executed if the above fails
       driver.findElement(By.xpath("//h3[normalize-space()='Something']")).click();       
   }
   catch (Exception ex2)
   {
       // handle
  }
}

CodePudding user response:

You can wrap up both the try-catch{} blocks within a single try-catch-finally{} block as follows:

try {
  new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.id("component-unique-id-31"))).click();
  System.out.println("Within in try block.");
}
catch(TimeoutException e) {
  new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//h3[normalize-space()='Something']"))).click();
  System.out.println("Within in catch block.");
} finally {
  System.out.println("The 'try catch' is finished.");
}

PS: You must avoid catching the raw exception.

  • Related