2016-12-02 1 views
0

J'utilisais un framework concombre/ruby ​​/ capybara/siteprism et implémentais les pages de test actuellement. J'ai atteint un point où il y a beaucoup de boutons radio (plus de 20) par page sur plusieurs pages, et je me demandais s'il y avait vraiment un avantage à essayer de les cartographier comme des éléments statiques dans mon modèle d'objet page. Par exemple, il semble beaucoup plus pratique d'utiliser simplement le texte du bouton radio dans la définition d'étape et d'appeler directement la méthode capybara 'choose', quelque chose comme le suivant, de sorte que je n'ai pas besoin de faire quoi que ce soit d'autre pour les plus de 20 boutons radio, il doit tous travailler en changeant le paramètre que nous transmettons dans la fonction:Y a-t-il un avantage à définir des boutons radio dans un modèle Page Object (par exemple, SitePrism) plutôt que d'utiliser directement Capybara?

cucumber feature: 
    When I select that "I am over 18" 

capybara step: 
    When /^I select that "(.*)"$/ |option| 
     choose(option) 

Alors qu'avec un modèle d'objet page comme siteprism, je suppose que la mise en œuvre aurait besoin définir et maintenir tous ces éléments indépendamment dans un format semblable à:

element :over_18_button, :radio_button, "I am over 18" 
element :over_12_button, :radio_button, "I am over 12" 
etc x50times 

Et pour l'utiliser, il faut créer la page, appeler l'élément, ce qui ne me semble pas aussi simple?

siteprism step: 
    When /^I select that "(.*)"$/ |option| 
    case option 
     when 'I am over 18' 
      over_18_button.click 
     when 'I am over 12' 
      over_12_button.click 

Je suppose que l'on pourrait créer des « éléments » ou une « section » avec un tableau à tous les boutons, mais, nous allons devoir mettre la logique supplémentaire pour les analyser et cliquez sur l'une de toute façon pertinente quelque part dans le code, alors que tout serait fait proprement et sans besoin de code supplémentaire ou de maintenance avec la méthode 'choose' de capybara.

Ai-je raison de supposer que dans cet exemple utiliser Capybara est une meilleure option? ou s'il serait préférable de définir «TOUS» les éléments Web dans le modèle d'objet de page, quel serait l'avantage de cela? et le code d'objet de page pourrait-il être fait d'une manière différente pour tirer profit de n'importe quel avantage possible?

PS: ajouter la balise de page objet ', « watir » aussi bien que je suppose que la structure conceptuelle des essais serait similaire à quelqu'un, peut-être en utilisant ce cadre peut aider aussi bien ...

Répondre

0

Cette instruction complexe n'est pas nécessaire.

When /^I select that I am over "(\d\d)"$/ |age| 
    @page_object.select_age(age) 

Je ne connais pas le site_prism. Mon watir_drops bijou vous permettrait de définir tout avec le même motif comme celui-ci:

element(:age_button) { |age| browser.radio_button(text: "I am over #{age}") 

avec cette méthode dans l'objet de la page:

def select_age(age) 
    age_button(age).set 
end 

On pourrait aussi entrer dans une longue discussion tout sur l'utilisation déclarative à la place des étapes impératives. En outre, meilleure pratique L'utilisation de l'objet Page évite d'appeler directement des éléments définis. Les méthodes d'appel qui accomplissent la logique métier et ces méthodes effectuent toutes les implémentations, y compris les définitions d'éléments et les actions sur celles-ci.

+0

Je vois ce que vous voulez dire, avoir une fonction qui obtient le paramètre et le passe lors de la définition de l'élément objet page ... mais dans ce cas, quel est l'avantage d'utiliser '@ page_object.select_age (age)' avec le nouvelle implémentation (plus le besoin de créer la nouvelle fonction et de définir l'élément) plutôt que d'utiliser directement la méthode capybara ou watir - comme 'choose (age)' et d'éviter tous les autres bits? Je ne vois pas pourquoi ce serait une bonne idée, mais il me manque peut-être un point important dans le modèle d'objet de la page? – mickael

+0

Le modèle Page Object résout plusieurs problèmes.1) Résumé la logique de mise en œuvre de la logique métier (quoi et comment) 2) garder le code DRY (tout peut être mis à jour en un seul endroit) et 3) organisation intelligente pour faciliter la maintenance (quand une page change, vous mettez à jour la page associée objet). Je ne peux pas parler des meilleures pratiques de Capybara, mais Watir est plus une bibliothèque (au cadre de Capybara), qui se prête bien à ce genre d'abstraction. – titusfortner