2017-09-28 14 views
0

est ici un peu de fond sur les spécifications de mon projet:Comment gérer les variations du texte interne HTMLControl dans un modèle d'objet de page?

  • Nous utilisons Specflow et Microsoft Framework CodedUI pour UI Automation
  • J'ai construit un PageFactory qui combine trois classes de base Résumé: BasePage, BaseMap et BaseValidator que toutes les cartes, les pages et les validateurs hériteront
  • Notre application que nous automatisons a de nombreux flux de travail qui font des contrôles HTML définis ont des valeurs différentes de InnerText (HTMLComboBoxes par exemple)
  • tout est et doit être soustrait de la Specflow réelle Te st code dans la page Motif d'objet, pas de code unique peut exister dans un Specflow étape

Mon problème: Dans mes cartes, j'ai certains contrôles comme une combobox qui a un changement InnerText si un certain flux de travail est sélectionné. Je dois créer des instructions d'assertion et de vérification pour m'assurer que InnerText est correct pour le flux de travail sélectionné. Ce n'est pas un problème. Cependant, je ne veux pas simplement définir une nouvelle variable pour chaque changement InnerText (il y a beaucoup). Y a-t-il un moyen de rendre compte des variations InnerText dans le modèle d'objet Page et de ne pas avoir à coder une nouvelle variable pour chacun?

Voici un exemple d'une carte d'entrée:

 public HtmlComboBox NextActionControlDropDownList() 
    { 
     var NextActionControlDropDownList = new PropertyExpressionCollection { 
      new PropertyExpression(HtmlComboBox.PropertyNames.Id, "MEDCHARTContent_EmmpsContent_nextActionControl_ActionDropDownList", PropertyExpressionOperator.EqualTo) 
     }; 
     return Window.Find<HtmlComboBox>(NextActionControlDropDownList); 
    } 

Ceci est la définition de contrôle de base. Il peut également être ceci:

 public HtmlComboBox NextActionControlARFormalComplReview() 
    { 
     var NextActionControlARFormalComplReview = new PropertyExpressionCollection { 
      new PropertyExpression(HtmlComboBox.PropertyNames.Id, "MEDCHARTContent_EmmpsContent_nextActionControl_ActionDropDownList", PropertyExpressionOperator.EqualTo), 
      new PropertyExpression(HtmlComboBox.PropertyNames.InnerText, "--Select Action-- Return to USARC ", PropertyExpressionOperator.EqualTo) 
     }; 
     return Window.Find<HtmlComboBox>(NextActionControlARFormalComplReview); 
    } 

Éditer: Mes pensées jusqu'ici étaient peut-être pour faire une autre carte et l'hériter? Mais cela ne résoudrait pas mon problème initial de trop de variables pour un seul contrôle. Je ne vois pas comment les instructions If aideraient soit parce qu'il doit être défini pour le cadre pour trouver le contrôle. Peut-être que je pourrais stocker les différentes valeurs dans une collection de sortes et avoir une valeur de clé de paramètre pour y accéder ... mais cela semble que je rencontrerais beaucoup de problèmes ...

Répondre

1

Si vous essayez et voyez les méthodes sous PropertyExpressionOperator vous verriez quelque chose appelé Contains.

new PropertyExpression(HtmlComboBox.PropertyNames.InnerText, "--Select Action--", PropertyExpressionOperator.Contains) 

Espérons que ce que vous cherchez !!

+0

Je n'y avais même pas pensé! Merci beaucoup! –