web-dev-qa-db-fra.com

Comment "attendre l'activité" avec Appium, au début et pendant le test lui-même?

Je démarre une application déjà installée en utilisant appium.

Une fois mon pilote initialisé. Comment puis-je faire en sorte que le sondage attende qu'une certaine activité s'affiche?

Je n'ai vu que cette façon d'attendre l'activité lors du démarrage

cap.setCapability("app-wait-activity", "activity-to-wait-for");

Est-ce qu'il y a un autre moyen? Comment attendre une autre activité spécifique lorsque je n'initialise pas. Dire après un clic sur un bouton?

juste sleep x seconds?

12
Elad Benda2

Une activité spécifique signifie qu'un élément spécifique est affiché. J'utilise le code suivant pour attendre un certain élément à l'écran:

WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.elementToBeClickable(By
        .xpath("//Android.widget.Button[contains(@text, 'Log In')]")));

ou:

WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.presenceOfElementLocated(By
            .xpath("//Android.widget.TextView[contains(@resource-id, 'action_bar_title')]")));
11
Alex

Vous pouvez utiliser le code suivant pour interroger l'activité en cours chaque seconde. Si vous souhaitez réduire le temps d'interrogation, vous pouvez réduire le temps de sommeil à 500 et wait*2:

public void waitForActivity(String desiredActivity, int wait) throws InterruptedException
{
    int counter = 0;
    do {
        Thread.sleep(1000);
        counter++;
    } while(driver.currentActivity().contains(desiredActivity) && (counter<=wait));

    log("Activity appeared :" + driver.currentActivity(), true);
}
2
shiv
long startTime = System.currentTimeMillis();
while(System.currentTimeMillis() - startTime < Time_Out)
    if (getDriver().currentActivity().equals(activity))
        break;
1
sameeksha sahib
WebDriverWait wait = new WebDriverWait(driver,20);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("about_me"))); 

Si vous souhaitez savoir en détail comment l'attente implicite et explicite peut être utilisée dans Appium, visitez ce TUTORIEL

1
anuja jain

Cela peut être fait de différentes manières en utilisant element. Webdriver fournit des classes "WebDriverWait", "ExpectedCondition" pour implémenter cela. La classe ExpectedConditions fournit un ensemble de conditions prédéfinies pour attendre les éléments comme:

  1. elementSelectionStateToBe: un état d'élément est la sélection.
  2. elementToBeClickable: un élément est présent et cliquable.
  3. elementToBeSelected: l'élément est sélectionné
  4. frameToBeAvailableAndSwitchToIt: le cadre est disponible et le cadre
  5. choisi. invisibilityOfElementLocated: un élément est invisible
  6. presenceOfAllElementsLocatedBy: élément présent localisé par.
  7. actualisé: attendez une condition particulière lors de l'actualisation de la page.
  8. textToBePresentInElement: texte présent sur un élément particulier
  9. textToBePresentInElementValue: et la valeur de l'élément présente pour un
    élément particulier. et bien d'autres Vous pouvez apprendre plus de façons d'implémenter l'attente implicite et explicite en passant par cette URL: http://roadtoautomation.blogspot.in/2013/10/webdriver-implicit-and-explicit-wait.html

J'espère que cela aide...

1
Saharshdeep Singh

Vous pouvez également utiliser les éléments suivants:

getDriver().manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);

ou juste:

driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);

ou quelque chose comme ceci:

Thread.sleep(5000);
1
Alex

Je vous suggère d'utiliser WebDriverWait. Thread.sleep () n'est pas un bon moyen d'utiliser dans vos scripts de test

1
Gaurav