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()
3 Réponses :
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é.
Vous pouvez attendre que l'élément cible se trouve comme ci-dessous.
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')) )
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