Selenium WebDriver - Comment mettre en Page d'attente de Chargement à l'aide de C#
Je suis en utilisant le Sélénium 2.20 WebDriver pour créer et gérer un navigateur firefox avec le C#. À visiter une page, j'utilise le code suivant, le réglage du pilote délais d'attente avant de visiter l'URL:
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5)); //Set implicit wait timeouts to 5 secs
driver.Manage().Timeouts().SetScriptTimeout(new TimeSpan(0, 0, 0, 5)); //Set script timeouts to 5 secs
driver.Navigate().GoToUrl(myUrl); //Goto page url
Le problème est que, parfois, les pages prennent une éternité à se charger, et il semble que le délai d'attente par défaut pour une page se charge en utilisant selenium WebDriver est de 30 secondes, ce qui est trop long. Et je ne crois pas que les délais d'attente je suis en train d'appliquer le chargement d'une page à l'aide de la GoToUrl() la méthode.
Donc je suis à essayer de comprendre comment définir un délai d'attente pour qu'une page se charge, cependant, je ne peux pas trouver une propriété ou une méthode qui fonctionne réellement. La valeur par défaut de 30 secondes, délai d'attente semble également s'appliquer lorsque je clique sur un élément.
Est-il un moyen de définir la page d'attente de chargement pour une valeur spécifique de sorte que lorsque j'appelle la GoToUrl() la méthode qu'il aura plus qu'à attendre mon heure spécifiée avant de continuer?
- Êtes-vous sûr
GoToUrl()
attend que la page se charge? Mon expérience est qu'il ne l'est pas. Mais c'est juste un sentiment, pas un fait. - oui, je suis sûr à 100% que l'appel GoToUrl() bloque l'exécution jusqu'à ce que la page est complètement terminé le chargement, et j'ai mesuré un délai d'attente par défaut est de 30 secondes pour l'appel de cette méthode, après 30 secondes d'exécution est de continuer, et je vais essayer de réduire ce délai d'attente par défaut est de 30 secondes en quelque sorte.
- j'ai posté la même question: stackoverflow.com/questions/11958701/...
- Il ne bloque jusqu'à ce que la page se charge aussi loin que la onReady événement est envoyé par le navigateur. Si theres post js et ajax ... que la page "chargé" des connaissances ne signifie rien.
Vous devez vous connecter pour publier un commentaire.
Remarque:
driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(5))
est maintenant obsolète.Dans le cas où cette aide à quiconque cherche toujours la réponse à cela, le C# WebDriver API contient maintenant la méthode appropriée.
ImplicitlyWait
est la quantité de temps de recherche d'un élément dans la page,SetPageLoadTimeout
est la quantité de temps d'attente pour une URL à charger, etSetScriptTimeout
est la quantité de temps d'attente pour async JS à charger.Avec cela, vous devriez être en mesure de déclarer une attente explicite.
vous pouvez également changer l'implicite temps d'attente
Je pense que c'est la syntaxe de C#. (pas sûr)
En ruby, il est
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
diminution de 5 secondes, à la façon de moins en moins vous le souhaitez. Qui aura une incidence sur votre temps d'attente pour la gotourl.wait.until (driver.Navigate().GoToUrl(myUrl)); // Goto page url
où votre explicitement définir le temps d'attente pour le gotoURL commande à exécuterwait.until (driver.Navigate().GoToUrl(myUrl)); // Goto page url
, mais à partir des résultats que j'ai obtenu cela ne fonctionne pas du tout.j'ai trouvé la solution à ce problème. Lors de la création d'un nouveau FirefoxDriver, il existe des surcharges du constructeur qui vous permettent de spécifier une commande délai d'attente qui est la durée maximale d'attente pour chaque commande, et il semble fonctionner lors de l'appel de la GoToUrl() méthode:
lien vers FirefoxDriver constructeur de la documentation de référence:
http://selenium.googlecode.com/svn/trunk/docs/api/dotnet/html/M_OpenQA_Selenium_Firefox_FirefoxDriver__ctor_2.htm
Espère que cela aide quelqu'un d'autre qui fonctionne ce problème.
À partir de 2018:
En plus de ces:
attendre pour la recherche d'un élément, le chargement d'une page, et en attente de script respectivement.
Il y a:
De chargement de la Page délais d'attente ne sont pas mises en œuvre dans le .NET liaisons encore. J'espère qu'ils seront bientôt.
Nous, les brésiliens ont un mot de merde solutions de contournement "Gambiarra"... eh Bien... au moins ils faire le travail...
Voici la mienne:
Ce que mon
WaitElement(By, int)
n':Après cela, vous pouvez jouer avec
timeout
...Faire
By
les choses que vous remarquerez que les charges dernière dans la page (comme en javascript éléments et des captchas) en souvenir: il va commencer à travailler à la//rest of your application
avant que la page est entièrement chargée, donc peut-être bien de mettre unThread.Sleep(1000)
à la fin juste pour être sûr...Également d'avis que cette méthode sera appelée APRÈS 60 secondes délai standard de Sélénium
DRIVER.Navigate().GoToUrl(url);
Pas le meilleur, mais... comme je l'ai dit: Un bon gambiarra fait le travail...
Pour toute personne qui veut l'effet inverse: paramètre de délai d'attente de plus de 60 ans.
Vous avez besoin de l'utiliser:
et
La
new FirefoxDriver(binary, profile, timeSpan)
a été obsolètes.ne fonctionne pas.
Cela fonctionne. Utiliser un accesseur de propriété de syntaxe.