1
votes

sinon?? essayer?? J'ai besoin d'aide sur les méthodes

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.


5 commentaires

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 renvoyer null . Mais ils pourraient le faire avec findElements . J'ai mis à jour ma réponse pour montrer comment.


3 Réponses :


3
votes

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


3 commentaires

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».



2
votes

Je suppose que "ne fonctionne pas", vous voulez dire que l'élément n'a pas été trouvé. Deux options:

  1. 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 .

  2. 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();
}


1 commentaires

Cher @ T.J. Crowder merci d'avoir partagé votre temps pour aider la communauté SO.



0
votes

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.


0 commentaires