99 votes

Le sélénium de cmà #39;ExpectedConditions est obsolète #39;

En essayant d'attendre explicitement qu'un élément devienne visible à l'aide de ExpectedConditions, Visual Studio m'avertit qu'il est maintenant obsolète et sera retiré du sélénium bientôt.

Quelle est la méthode actuelle/nouvelle pour obtenir le même résultat?

150voto

David Stampher Points 1545

J'ai résolu ma propre question et je voulais fournir la réponse pour tous ceux qui se demandent comment résoudre ce problème avec la dernière version de Sélénium.

À l'aide de nuget, recherchez DotNetSeleniumExtras.WaitHelpers, importez cet espace de nom dans votre classe. Maintenant, vous pouvez le faire:

Et l'avertissement dans l'IDE aura disparu.

39voto

Rob F. Points 141

Si vous ne voulez pas télécharger un paquet nuget supplémentaire, il est assez facile de déclarer votre propre fonction (ou condition), en particulier en utilisant une expression lamda, par exemple.

C'est aussi très versitile, puisqu'il est maintenant possible d'évaluer n'importe quel type d'expression bool.

15voto

PandaMagnus Points 51

Les réponses à changer de fonction anonyme est la plus correcte. Ou écrivez votre propre classe de votre propre, de besoin, les conditions d'attente. Un exemple d'utilisation d'une fonction anonyme pour l'explicite scénario ci-dessus serait quelque chose comme...

var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 30));
wait.IgnoreExceptionTypes(typeof(NoSuchElementException), typeof(ElementNotVisibleException));
var element = wait.Until(() => 
{
    var e = Driver.FindElement(By.Id("content-section"));
    if(e.Displayed)
        return e;
});

Et à ce moment, la fonction elle-même pourrait être hors de sa propre dans une classe de votre solution que vous pouvez appeler. La bonne chose est que vous pouvez modifier au besoin; j'ai vu plusieurs cas où vraiment mal faite sites finissent par rompre la façon dont le ExpectedConditions de travail, et qui a été résolu avec l'équipe de l'écriture de notre propre fonction.

Comme par le C# contributeur:

À l'égard de ExpectedConditions, encore une fois, c'était un plus que a été créé en .NET uniquement parce que "Java a elle." Au moment de la ExpectedConditions classe en Java a été créé, la syntaxe pour la création d' une fonction lambda (ou quelque chose qui a agi comme un seul) a été particulièrement arcanes et difficile à comprendre. Dans ce cas, une classe d'assistance faite beaucoup de sens pour le Java liaisons. Cependant, C# n'est pas Java. En C#, la syntaxe pour la création d'lambda fonctions ("méthodes anonymes" dans le langue de la documentation de Microsoft) a été bien compris par C# les développeurs depuis de nombreuses années, et est un outil standard dans leur arsenal.

Dans ce cas, la question de code de verbosité ne possède certains avantages, mais depuis les conditions d'attente sont rarement one-size-fits-all, il serait bien nettoyeur approche pour les utilisateurs de développer leurs propres conditions de la classe qui a l'attente des conditions qui les intéresse. Ceci, cependant, est quelque chose que les utilisateurs ont de l'aversion pour. En outre, la pensée d'un "standard" de la collection des implémentations spécifiques, les conditions d'attente semble être une bonne idée sur son visage, mais il ya beaucoup de variation sur la manière dont les utilisateurs veulent tout état de travailler. Avoir un la collecte des conditions d'attente pourrait être une bonne chose, mais le Sélénium le projet n'est pas le lieu pour cela.

http://jimevansmusic.blogspot.com/2018/03/deprecating-parts-of-seleniums-net.html

14voto

Everton Rocha Points 129

C'est très simple, il suffit de changer

À

9voto

Krunal Patel Points 104

Nuget requis - DotNetSeleniumExtras.WaitHelpers

``

Je viens de démontrer l'élément événement cliquable. de même, d'autres événements peuvent être utilisés avec les paramètres requis. J'espère que cela aidera

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X