2016-12-15 1 views
1

Comment faire pour convertir IWebElement dans Locator Selenium WebDriver Page Objects?Comment convertir Selenium IWebElement dans Selenium Locator By C#?

Je travaille comme ceci:

using OpenQA.Selenium.Support.PageObjects; 
     [FindsBy(How = How.Id, Using = "user")] 
     public IWebElement txtUser { get; set; } 

     public void fillUserField(string user) 
     { 
      wait.Until(ExpectedConditions.ElementIsVisible(By.Id("user"))); 
      txtUser.SendKeys(user); 
     } 

Je ne veux pas répéter l'ID « utilisateur » dans l'attente.

Je ne travaille pas comme ceci:

public void fillUserField(string user) 
    { // TO DO - Convert IWebElement in Locator (BY) 
     //Argument1: Cannot convert from 'OpenQA.Selenium.IWebElement' to 'OpenQA.Selenium.By' 
     wait.Until(ExpectedConditions.**ElementIsVisible(txtUser)**); 
     txtUser.SendKeys(user); 
    } 

Est-ce possible? Merci!

+0

Si vous allez coller avec ce modèle, vous pouvez créer une méthode distincte qui prend 'IWebElement', le transmettre vos éléments (par exemple' txtUser'), puis gérer dans cette méthode avec une tentative d'attente jusqu'à ce que l'élément est trouvé/prêt/visible. Je ne vois pas comment faire attendre dans votre scénario sans dupliquer la chaîne de type Par locator. IMO, la solution idéale pour attendre sur les éléments est la suivante: http://stackoverflow.com/a/7312740/2246511 Mais je ne sais pas comment vous pourriez utiliser cela avec PageObjects. – jibbs

Répondre

-1

Vous devez déclarer un localisateur en haut de la classe.

public By userLocator = By.Id("user"); 

puis l'utiliser comme

wait.Until(ExpectedConditions.ElementIsVisible(userLocator)); 
+1

Vous auriez toujours la duplication que Ramon essaie d'éviter avec l'attribut FindsBy de la propriété txtUser qu'il possède déjà, puis de nouveau dans le champ userLocator que vous recommandez. – jibbs

+0

@jibbs Oui, mais il n'aurait pas besoin de 'FindsBy' à ce moment-là, donc la duplication serait supprimée. – JeffC

+1

@JeffC Cette solution ne résout pas une duplication, mais j'ai résolu le problème comme ceci: wait.Until (ExpectedConditions.ElementToBeClickable (+1 overload)); Merci –