Si une méthode fonctionne et une autre ne fonctionne pas, comment puis-je faire en sorte que le code essaie une méthode alternative?
Voici le code
1ère méthode p >
driver.findElement(By.id("com.offerup:id/circle")).click(); driver.findElement(By.id("com.offerup:id/done")).click();
2e méthode
driver.findElement(By.id("com.simplemobiletools.gallery:id/dir_thumbnail")).click(); driver.findElement(By.id("com.simplemobiletools.gallery:id/medium_thumbnail")).click();
Si la première méthode ne fonctionne pas, je veux qu'elle continue et essayez la deuxième méthode mais, je ne sais pas quelle commande utiliser pour cela.
Je ne suis pas très expérimenté en programmation, veuillez donc rester avec moi.
3 Réponses :
Vous pouvez utiliser le bloc try catch à cette fin:
try { driver.findElement(By.id("com.simplemobiletools.gallery:id/dir_thumbnail")).click(); driver.findElement(By.id("com.simplemobiletools.gallery:id/medium_thumbnail")).click(); catch (Exception e) { driver.findElement(By.id("com.offerup:id/circle")).click(); driver.findElement(By.id("com.offerup:id/done")).click(); }
vous pouvez également donner une exception spécifique, par exemple "ElementNotFoundException" ou "ElementNotVisibleException" dans votre type de paramètre catch
La documentation indique uniquement que findElement
jette NoSuchElementException
, pas ElementNotFoundException
ou ElementNotVisibleException
.
@ T.J.Crowder vous devez également être conscient des exceptions des autres méthodes, par exemple la méthode .click () lève ElementNotVisibleException et StaleElementReferenceException
Certes, cela dépend de ce que l'OP entend par «ne fonctionne pas».
Je suppose que "ne fonctionne pas", vous voulez dire que l'élément n'a pas été trouvé. Deux options:
Selon la documentation , findElement
déclenche une NoSuchElementException
si l'élément n'est pas trouvé. Vous pouvez donc continuer à utiliser findElement
et intercepter l'exception via try
/catch
.
Vous pouvez également utiliser findElements
, qui retourne une Liste
, et branche en fonction de la présence ou non. Comme LuisGP l'a souligné , éviter les exceptions est souvent utile.
Option 1:
List<WebElement> elements; elements = driver.findElements(By.id("com.simplemobiletools.gallery:id/dir_thumbnail")); if (element.size() == 0) { driver.findElement(By.id("com.offerup:id/circle")).click(); } else { elements.get(0).click(); } elements = driver.findElements(By.id("com.simplemobiletools.gallery:id/medium_thumbnail")); if (elements.size() == 0) { driver.findElement(By.id("com.offerup:id/done")).click(); } else { elements.get(0).click(); }
Ou si vous vouliez les gérer un par un:
XXX
Option 2 (si vous souhaitez les gérer un par un, vous devriez pouvoir les modifier si vous souhaitez créer des branches uniquement sur le premier résultat):
try { driver.findElement(By.id("com.simplemobiletools.gallery:id/dir_thumbnail")).click(); } catch (NoSuchElementException e) { driver.findElement(By.id("com.offerup:id/circle")).click(); } try { driver.findElement(By.id("com.simplemobiletools.gallery:id/medium_thumbnail")).click(); } catch (NoSuchElementException e) { driver.findElement(By.id("com.offerup:id/done")).click(); }
Cher @ T.J. Crowder merci d'avoir partagé votre temps pour aider la communauté SO.
Vous pouvez essayer de cliquer sur un élément parmi 4 éléments donnés qui est visible et cliquable. Cela vous rendra sûr de cliquer sur l'élément après avoir attrapé l'exception et les bonnes pratiques à suivre. Il lèvera une exception uniquement si aucun élément ne sera trouvé sur 4 et qu'il s'agit d'un cas valide.
MobileElement A = driver.findElement(By.id("com.simplemobiletools.gallery:id/dir_thumbnail")); MobileElement B = driver.findElement(By.id("com.simplemobiletools.gallery:id/medium_thumbnail")); MobileElement C = driver.findElement(By.id("com.offerup:id/circle")); MobileElement D = driver.findElement(By.id("com.offerup:id/done")); public void clickOnElement() { try { if(A.isDisplayed() && A.isEnabled()) { A.click(); } if(B.isDisplayed() && B.isEnabled()) { B.click(); } if(C.isDisplayed() && C.isEnabled()) { C.click(); } if(D.isDisplayed() && D.isEnabled()) { D.click(); } }catch (Exception e) { e.printStackTrace(); } }
Appelez simplement la méthode 'clickOnElement' dans votre scénario de test.
Que signifie «ne fonctionne pas»? Veuillez être plus précis.
disons que je veux qu'il clique sur "insérer l'élément n ° 1 ici", mais s'il ne clique pas sur cet élément, comment puis-je le faire cliquer sur un autre élément "insérer l'élément n ° 2 ici"?
Qu'entendez-vous par "s'il ne clique pas sur cet élément" ? L'élément n'a pas été trouvé? Le clic a échoué? Autre chose?
Au lieu de capturer l'exception NullPointerException si findElement renvoie null, vous devez fractionner l'appel en une variable temporelle et voir si findElement est retourné null. Si ce n'est pas le cas, appelez click, si c'est le cas, puis répétez avec la deuxième méthode. N'utilisez pas d'exceptions si vous pouvez le faire proprement.
@LuisGP -
findElement
renvoie lorsque l'élément est introuvable, plutôt que de renvoyernull
. Mais ils pourraient le faire avecfindElements
. J'ai mis à jour ma réponse pour montrer comment.