2016-11-03 1 views
2

Le DOM sur lequel je travaille a beaucoup d'éléments imbriqués (boîte à l'intérieur de la structure de boîte) et je trouve qu'il est difficile de coder en utilisant un motif de conception POM.Comment utiliser l'annotation [FindsBy] afin de pouvoir réutiliser l'élément trouvé pour trouver ses éléments internes?

J'ai utilisé FindsBy, FindsByAll, FindsBySequence mais il semble que chaque fois que j'ai besoin d'identifier les éléments internes d'un conteneur, je devrai inclure la recherche de l'élément/conteneur externe.

Existe-t-il un moyen de réutiliser l'élément 'DimensionPanel' au lieu d'utiliser [FindsBy (How = How.Id, Using = "container-dimpanel")]?

ex:

[FindsBy(How = How.Id, Using = "container-dimpanel")] 
    public IWebElement DimensionPanel { get; set; } 

    #region DimensionPanel elements 
    [FindsBySequence] 
    [FindsBy(How = How.Id, Using = "container-dimpanel")] 
    [FindsBy(How = How.Id, Using = "metrics-selector-container")] 
    [FindsBy(How = How.TagName, Using = "a")] 
    public IWebElement MetricsButton { get; set; } 

    [FindsBySequence] 
    [FindsBy(How = How.Id, Using = "container-dimpanel")] 
    [FindsBy(How = How.Id, Using = "metrics-selector-container")] 
    [FindsBy(How = How.TagName, Using = "span")] 
    public IWebElement MetricsCount { get; set; } 
    #endregion DimensionPanel elements 
+0

Essayez unique sélecteurs CSS ou XPath pour se rendre à la éléments internes au lieu de plusieurs findbys. Vous pouvez réutiliser l'élément Web DimensionalPanel pour rechercher des éléments internes à l'aide de la méthode findElement de l'élément Web. Il n'y a aucun concept de définir un élément pour être le contexte de recherche pour un autre élément dans l'annotation FindBys hors de la boîte. Appium, l'extension mobile de sélénium, a un concept de widgets qui pourrait aider. N'avez pas regardé dans le code C# appium, mais en Java, il y a une classe Widget qui peut être utilisée pour des scénarios non mobiles aussi.Vous pouvez jeter un oeil à la C# implémentez et réutilisez-le. – Grasshopper

+0

Merci pour la réponse, je prévois d'utiliser FindElement pour rechercher des éléments intérieurs. Raison J'hésite à utiliser CSS ou XPath parce que, DOM est composé des mêmes éléments dans différents conteneurs et en utilisant ces locators, je devrai fournir un chemin qui sera beaucoup plus long et difficile à déboguer si l'élément change. –

Répondre

0

Je ne sais pas si cela utile pour vous, mais en Java, vous pouvez utiliser l'annotation findBy comme celui-ci

@FindBy (id="metrics-selector-container") 
public WebElement DimensionPanel;