1
votes

Quelles sont les meilleures pratiques lors de l'affirmation des éléments iOS sont affichés?

J'essaie d'écrire mon premier test d'automatisation de l'interface utilisateur pour une application iOS avec Appium / Python.

Je trouve que lorsque j'énumère 10 assertions comme celle ci-dessous, j'obtiens des résultats très incohérents ... parfois ça réussit , mais il échoue généralement à la troisième assertion, parfois à la huitième.

driver.wait_for_element_by_name_to_display('Settings')
assert driver.find_element_by_name('Settings').is_displayed()

J'ai également essayé d'utiliser des waits:

assert driver.find_element_by_name('Settings').is_displayed()


0 commentaires

3 Réponses :


1
votes

Je ne connais pas le code python, je montre comment je le fais en java. J'espère que vous pourrez le convertir en code python.

Créez une méthode comme celle-ci:

MobileElement element = driver.findElementById('element id');
boolean isElementVisible = isElementDisplayed(element);
if(isElementVisible){
   //element is visible
}else{
   //element is not visible
}

Ensuite, vous pouvez vérifier si l'élément est affiché en appelant la méthode ci-dessus:

public boolean isElementDisplayed(MobileElement el){
     try{
        return el.isDisplayed();
     }catch(Exception e){
        return false;
     }
}

Si vous n'utilisez pas try catch, l'exception sera lancée lorsque l'élément n'est pas trouvé.


0 commentaires

0
votes

Vous pouvez attendre que l'élément cible se trouve comme ci-dessous.

https://github.com/appium/python-client/blob/6cc1e144289ef3ee1d3cbb96ccdc0e687d179cac/test/functional/android/helper/test_helper.py

Exemple:

from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

TIMEOUT = 3
WebDriverWait(self.driver, TIMEOUT).until(
    EC.presence_of_element_located((MobileBy.ACCESSIBILITY_ID, 'Text'))
)


0 commentaires

1
votes

Il existe une bonne classe util qui peut être utilisée pour ce CE. Voici le lien vers le git documentation

wait.until(EC.visibility_of_any_elements_located((MobileBy.NAME, 'Settings'))

Ensuite, vous pouvez l'utiliser de cette façon pour détecter si un élément est présent:

from appium.webdriver.common.mobileby import MobileBy
# time in seconds
timeout = 10
wait = WebDriverWait(driver, timeout)
wait.until(EC.presence_of_element_located((MobileBy.NAME, 'Settings'))

Si vous avez besoin de détecter une utilisation présente et visible:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


0 commentaires