10
votes

Sélénium Obtenir la valeur de l'attente implicite actuelle

Je me rends compte que le sélénium a une valeur par défaut pour les attentes implicites, mais comment puis-je obtenir cette valeur si je le change? Par exemple: xxx

Comment puis-je obtenir plus tard la valeur 13 du pilote?


0 commentaires

5 Réponses :


9
votes

2 commentaires

+1 pour une bonne réponse, mais c'est vraiment malheureux :(, pourquoi n'auraient-ils pas un getter pour cette valeur ...


Ces liens ne fonctionnent plus. Les docs pourraient ne montrer aucun getters, mais nous pourrions regarder le code source pour voir s'il existe un moyen de faire notre propre getter. Je l'ai fait et je ne vois pas un moyen de faire notre propre getter. L'attente implicite est effectivement cachée de nous - Stackoverflow.com/a/60919695/1521751



5
votes

Je sais que je suis de quelques années de retard et @janegoodall n'est pas faux - il n'y a pas de fonction intégrée pour cela. Mais c'est pas impossible! Strong>

Il n'est pas très difficile de créer vos propres versions de l'interface WebDriver et de la classe de pilotes spécifique au navigateur. Et puis, vous pouvez mettre le code que vous voulez dans le pilote! P>

Exemple: P>

myDriver.java (version spécialisée du webDiver, pas tout à fait obligatoire mais une très bonne idée):

public class MyProgram {
    MyDriver driver = new MyChrome();
    driver.setWait(10);
    assert(driver.getWait() == 10);
}
J'espère que c'est utile! p> p>


4 commentaires

Il serait beaucoup plus facile de simplement définir le temps d'attente souhaité à l'aide d'une variable. Ensuite, vous pouvez faire référence à la variable à tout moment que vous voulez.


Bien sûr, mais parfois, vous avez besoin de cette valeur pour être emballé avec l'objet du conducteur lui-même. Cette solution est beaucoup plus propre que de passer une variable autour de l'utilisation du pilote.


@forresthopkinsa - Merci pour votre réponse. Pourquoi avez-vous besoin de la valeur pour être emballé avec l'objet de pilote lui-même? En outre, y a-t-il de bonnes justifications pour pouvoir obtenir les attentes implicites?


@armani Il y a plusieurs situations où vous passez le conducteur autour de nombreux endroits et vous ne pouvez pas (ni ne veut pas) envoyer autour d'un objet de configuration avec elle. Un exemple facile est lorsque vous utilisez un conteneur DI - vous venez d'injecter le pilote et vous avez les informations dont vous avez besoin. Cette méthode garantit également que le getter Wait est synchronisé avec la valeur d'attente réelle. Quant à Pourquoi , eh bien, un scénario est que vous devez connaître l'attente implicite de pouvoir faire du temps autre code correctement. Je pense que l'activité sur cette question est la preuve qu'il est nécessaire d'obtenir des valeurs d'attente implicites. :)



2
votes

Pour ceux qui sont venus ici de Google. En 2018, il semble qu'il y ait une méthode pour obtenir ces délais d'expiration au moins en JavaScript (je sais que la question était sur Java): xxx

espère que cela aidera.


0 commentaires

0
votes

tl; dr strong> - ce n'est pas une solution pour obtenir des attentes implicites. Vous ne pouvez pas obtenir l'attente implicite à Java, même aujourd'hui, sans utiliser de solution de contournement comme celui-ci .

in 2020, sélénium 3.141 .59 n'a toujours pas de getter pour aucun délai d'attente. L'interface WebDriver dispose d'un délai d'attente d'interface imbriquée qui ne définit aucun getters. RemotewebRiver, qui est le parent des pilotes Chrome et Firefox, implémente l'interface WebDriver et n'ajoute pas de getter pour les délais d'attente. P>

Remotewebriver implémente webDriver.timeouts, mais il ne stocke pas la valeur du délai impicitié nulle part , comme vous pouvez le constater à partir du code ci-dessous. P>

  protected Response execute(String driverCommand, Map<String, ?> parameters)
  //Open the source code to see why you can't make your own getter for implicitWait.


0 commentaires

0
votes

Ceci peut imprimer la valeur du délai d'expiration réel (plus le temps de calcul, généralement dans 100 ms): xxx

afin que vous puissiez toujours appeler une telle méthode pour être sûr que vous savez Délai d'expiration, pas la valeur que vous avez essayée de définir.


0 commentaires