Comment attendre élément à charge dans selenium webdriver?
Je suis nouveau sur le selenium webdriver et suis en train de tester une application. Dans mon application, je dois tester sur la liaison de Facebook Compte. Chaque fois que je clique sur le lien de la fenêtre pop-up va être affiché à l'endroit où je dois entrer des informations d'identification. Je suis en mesure de relier parfois et parfois, le test échoue. Je sais la raison, car il faut du temps pour charger une fenêtre pop up et commande suivante est exécutée de sorte qu'il n'est pas en mesure de trouver l'élément. J'ai utilisé du Fil.Le sommeil, mais je veux utiliser l'implicite attendre ou explicite d'attente qui est toujours une bonne pratique plutôt que de Fil.Sommeil. Comment utiliser implicite attendre et où utiliser la commande exactement? S'il vous plaît conseils. Merci.
public void SocialFaceBook()
{
string currentWindow = driver.CurrentWindowHandle;
PopupWindowFinder finder = new PopupWindowFinder(driver);
string facebookWindow = finder.Click(driver.FindElement(By.XPath("//div[@id='panelFacebook']/div[2]/div[3]/div[3]/a")));
//Switch To FaceBook Window
driver.SwitchTo().Window(facebookWindow);
System.Threading.Thread.Sleep(3000);
//Link
//Email Address
IWebElement faceBookLinkEmail = driver.FindElement(By.Id("email"));
faceBookLinkEmail.SendKeys(SocialFaceBookEmail);
//Password
IWebElement faceBookLinkPass = driver.FindElement(By.Id("pass"));
faceBookLinkPass.SendKeys(SocialFaceBookPass);
//Log In Button
IWebElement faceBookLinkLogin = driver.FindElement(By.XPath("//input[@id='u_0_1']"));
faceBookLinkLogin.Click();
//Switch To Main Window
driver.SwitchTo().Window(currentWindow);
System.Threading.Thread.Sleep(3000);
//Sync
IWebElement faceBookSync = driver.FindElement(By.XPath("//div[@id='panelFacebook']/div[2]/div[3]/div[2]/a"));
faceBookSync.Click();
//Unlink
IWebElement faceBookUnLink = driver.FindElement(By.XPath("//div[@id='panelFacebook']/div[2]/div[3]/div[1]/a"));
faceBookUnLink.Click();
}
Parfois, il n'est pas en mesure de trouver le journal dans les détails, comme pop-up n'est pas chargé correctement et parfois, il n'est pas en mesure de trouver bouton de synchro facebook compte prend du temps pour lien. S'il vous plaît conseils.
- Voir la suite pour plus d'informations stackoverflow.com/questions/18063377/... soit implicite ou liquide attente de travail
- Diverses solutions ont été également fournis ici: stackoverflow.com/questions/6992993/....
- J'ai été en mesure d'obtenir quelque chose qui a travaillé très bien pour moi, alors que j'étais en attente de quelque chose pour être visible avant de cliquer dessus. Merci de poser cette question!
Vous devez vous connecter pour publier un commentaire.
Il va attendre d'un élément situé pour un maximum de 30 secondes si l'élément est trouvé avant qu'il s'exécute....
wait.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.CssSelector("#dummy-div")));
J'ai dû changer quelques petites choses à partir de @Vicky de la réponse, mais c'est ce que j'ai eu comme une méthode que je pourrais appeler.
et je l'appelle comme ceci:
J'ai utilisé pour écrire une fonction pour détecter un élément existe chaque seconde. si trouver de continuer, sinon jeté erreur de dépassement de délai. mais dans cette fonction j'ai toujours utiliser un Thread.Sommeil.
Attendre des autres la bonne solution.
- Je utiliser ExpectedCondition.visibilityOf(élément) au lieu de thread dort
Implicite attendez-max le temps d'attente pour identifier les objets, il permettra d'identifier l'objet de toutes les 500 ms. si elle ne parvient pas à identifier l'objet dans le temps maximum qu'il va jeter nosuchelement exception.
Explicite attendez-utilisée pour l'ajax chargement de la page pour le même but.
temps d'attente maximum est le même que le thread.sommeil
A écrit une méthode pour un projet:
D'attente devraient déjà avoir été défini.