5
votes

Comment garder une session Appium en vie pendant longtemps

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("...")


1 commentaires

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.


4 Réponses :


5
votes

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


0 commentaires

1
votes

Avez-vous envisagé et rejeté le remplacement de newCommandTimeout? Cela fonctionnera certainement, mais a des inconvénients.


3 commentaires

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.



1
votes

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.


3 commentaires

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.



4
votes

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


0 commentaires