Quelle est la meilleure approche pour les délais d'attente à l'aide de Sélénium à l'aide de Webdriver
J'ai couru dans un problème. Ma page web a un DropDownList
de contrôle. Une fois le DropDownList
les changements de la valeur (en sélectionnant une valeur différente), l'actualisation de la page et qu'elle rend le contenu.
Puis-je utiliser Thread.Sleep(2000);
avant et FindElement
.
Ma question: Quelle est la meilleure façon d'attendre le chargement de la page?
J'ai tellement de cas de Thread.Sleep(2000)
dans mon code que je commence à penser que ce n'est pas la meilleure façon d'aborder le problème.
Voici mon code:
[TestInitialize()]
public void Setup()
{
if (BaseIntegrationTest.browserType.Equals(BaseIntegrationTest.IE))
{
driver = new InternetExplorerDriver();
}
else if (BaseIntegrationTest.browserType.Equals(BaseIntegrationTest.CHROME))
{
//driver = new ChromeDriver();
}
else if (BaseIntegrationTest.browserType.Equals(BaseIntegrationTest.FIREFOX))
{
driver = new FirefoxDriver();
}
}
Et la deuxième partie:
[TestMethod]
public void testVerifyData()
{
//...................
//...................
driver.FindElement(By.XPath("//*[@id='ctl00_NavigationControl1_lnke']")).Click();
Thread.Sleep(2000);
//select from the dropdownlist.
IWebElement catagory = driver.FindElement(By.Id("ctl00_ContentPlaceHolder1_Filter"));
SelectElement selectCatagory = new SelectElement(catagory);
selectCatagory.SelectByText("Employee");
Thread.Sleep(2000);
//...................
//...................
}
Vous devez vous connecter pour publier un commentaire.
Fil.Sleep() est une très découragé façon de mettre en œuvre votre attend
Ce code est indiqué sur le sélénium documentation http://seleniumhq.org/docs/04_webdriver_advanced.html
C'est un exemple explicite d'attente où le sélénium ne va pas s'exécuter toutes les actions jusqu'à ce que votre élément est trouvé
Un exemple d'un implicite d'attente est:
Dans implicite attend le chauffeur vous attendra pour un montant donné de temps et d'interroger les DOM pour tous les éléments qui n'existent pas.
MODIFIER
WaitForElement
pour tous les Id ou tout simplement les codes qui prendra du temps? ou quelle est la meilleure pratique..- Je résoudre ce problème en utilisant WebDriverWait trop.
Mais j'ai mis attendre jusqu'au dernier élément affiché jusqu' (ex: le pied de page, le dernier élément de la liste).
ou
Il y a certains cas où vous avez besoin d'attendre, auquel cas la Tâche.Méthode délai fournira des résultats plus prévisibles que de Fil.Sommeil
Tâche.Delay(1000).Wait(); //Attente de 1 seconde
En supposant que l'actualisation causée par l'interaction est quelque chose que le Sélénium peut détecter, puis la méthode suivante sera probablement faire ce que vous avez besoin de:
waitForPageToLoad
Autant que je sache, cette méthode vérifie l'état dans le navigateur pour voir si le navigateur pense que c'est le chargement de quelque chose, et attend jusqu'à ce que cet état est désactivée. Toutefois, ce prêt de l'état est une sorte de vieux - il ya tellement de façons de charger dynamiquement une page ou partie de page que le prêt de l'état n'est pas toujours une représentation exacte de ce qui se passe.
Si vous savez ce qui se passe à la suite du changement de votre action - qui est, si vous savez que vous interagissez avec la liste déroulante, spécifiques des éléments de l'INTERFACE utilisateur apparaîtra qui n'étaient pas sur la page d'avant, alors vous serait probablement mieux d'attente pour ces éléments de l'INTERFACE utilisateur à apparaître. Vous pouvez le faire en écrivant une méthode qui vérifie à plusieurs reprises pour isTextPresent et l'attend dans de petits incréments, jusqu'à ce qu'un délai est atteint ou attendus de l'élément s'affiche. Il y a d'autres "est X Présente" des méthodes qui peuvent être utilisés dans ces méthodes, que vous pouvez trouver ailleurs dans le Sélénium Interface je lien.
si vous souhaitez obtenir html après le chargement de la page ou le délai d'attente a expiré:
J'ai fait une fonction personnalisée pour mon auto, il sera peut-être utile pour quelqu'un: