2017-10-19 48 views
1

J'essayais de convertir toute la définition de mes locators du format standart à l'annotation FindsBy en utilisant POM. Mais j'ai quelques locators, qui se composent des variables non-statiques et je reçois le message d'erreur: "Impossible d'accéder au champ non statique _createBookData dans le contexte statique".Comment utiliser la valeur non statique dans l'annotation FindsBy?

code

, que je veux:

[FindsBy(How = How.CssSelector, Using ="#select-month > option:nth-child(" + _createBookData.NumberMonth + ")") ] private IWebElement BirthmonthDropItem; 

Au lieu de ce code:

private IWebElement BirthmonthDropItem 
    {    
     get 
     { 
      return _waitDriver.Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("#select-month > option:nth-child(" + _createBookData.NumberMonth + ")"))); 
     } 
    } 

Répondre

0

Vous ne pouvez pas le faire. Les attributs sont et doivent être entièrement définis au moment de la compilation, pas au moment de l'exécution. C'est juste la façon dont le langage C# fonctionne. C'est par conception; il n'y a pas de solution pour contourner ce problème avec des attributs. Heureusement, le modèle d'objet de page n'a aucune dépendance sur l'utilisation de l'implémentation PageFactory. L'utilisation de PageFactory n'apporte aucun avantage perceptible sur les autres méthodes de remplissage d'un objet Page.