Je dois attendre au milieu de mon test pendant 5 minutes mais la session Appium a par défaut newCommandTimeout de 60 s. et j'obtiens une exception dans la commande suivante indiquant que ma session est expirée.
AndroidDriver appiumDriver = new AndroidDriver(new URL(getMcmUrl()), capabilities); Thread.sleep(5*60*1000); // 5 minutes sleep time appiumDriver.executeScript("...")
4 Réponses :
newCommandTimeout:
Combien de temps (en secondes) Appium attendra une nouvelle commande du client avant de supposer que le client quitte et met fin à la session
dans le cas où le délai d'expiration est de 60 secondes, vous devez exécuter n'importe quelle commande au moins une fois par minute, pour maintenir la session en vie.
Par exemple, voici comment dormir pendant 5 minutes devraient ressembler à
for (int i = 0; i < 5; i++) { driver.getOrientation(); // execute some command to keep the session alive Thread.sleep(59*1000); // wake up before session expired }
Lisez cet article pour plus d'informations
https://l18.me/how-to-keep-alive-appium -driver-da9227b2fa
Avez-vous envisagé et rejeté le remplacement de newCommandTimeout? Cela fonctionnera certainement, mais a des inconvénients.
Cela peut fonctionner mais cela a certaines limites, n'utilisez cette solution que si: 1. vous connaissez déjà le temps dont vous avez besoin. 2. c'est toujours la même heure. 3. Peu importe que vous ayez toujours un long délai d’inactivité avant l’expiration du pilote. (même lorsque vous n’avez pas besoin).
Oui, c'est une option de dernier recours ou de débogage rapide. Votre solution est bien meilleure.
Ou vous pourriez simplement avoir différentes capacités pour ce test.
essayez d'utiliser cette commande,
"cap.setCapability (MobileCapabilityType.NEW_COMMAND_TIMEOUT," 100 ");"
Par cette commande, le serveur appium attendra une commande pendant 100 secondes avant de s'éteindre. Vous pouvez augmenter le délai d'expiration selon vos préférences.
Je ne rejetterai pas votre réponse car je ne pense pas qu'un effort honnête devrait être puni, mais le paramètre est une valeur numérique, pas une chaîne. Voir la réponse de Suban qui correspond à ce que j'utilise avec mon code.
Hey, merci pour la réponse. Mais j'ai utilisé la commande ci-dessus avec le paramètre comme valeur de chaîne et cela fonctionne pour moi.
C'est suffisant. Peut-être que le fonctionnement interne du processeur de capacités peut gérer des valeurs numériques passées sous forme de chaînes.
Dans vos DesiredCapabilities , ajoutez des fonctionnalités newCommandTimeout .
DesiredCapabilities caps=new DesiredCapabilities(); //other desired caps //add the following line caps.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 300); //then define your driver here AppiumDriver<MobileElement> driver= new AndroidDriver(new URL(getMcmUrl()), caps);
newCommandTimeout signifie combien de temps (en secondes) Appium attendra une nouvelle commande du client avant de supposer que le client quitte et met fin à la session.
300 s = 5 minutes
Je préfère ne pas changer la capacité de
newCommandTimeout
à cinq minutes, juste pouvoir la garder vivante pendant un temps dynamique, pendant que j'exécute une logique d'arrière-plan, par exemple.