2016-06-01 1 views
0

Comment trouver un élément s'il existe à plusieurs endroits dans une page mais a le même ID sous la même classe? Par exemple: Il y a deux champs de texte avec le même identifiant et je voudrais choisir le deuxième. Il fonctionne quand je viens d'écrire le watir/rubis (sans utiliser l'objet page) @ b.text_fields (: id => « couleur »). Last.set « rouge »trouver un élément spécifique qui existe à plusieurs endroits mais a le même ID, classe

Mais je ne réussis pas à ce jour pour faire cela fonctionne en utilisant l'objet page.

Merci à l'avance

+4

Vous ne devriez jamais avoir deux éléments html avec le même identifiant. – Abdo

+0

D'une manière ou d'une autre, le développeur Web a utilisé le même identifiant. Que faire si l'un des éléments est caché? – Rocker

+1

Avoir deux éléments sur la même page avec le même identifiant est un code brisé. Peu importe de quel type sont les éléments, ** tout ** deux éléments ayant le même identifiant sur la même page sont erronés. C'est un bug, et il doit être corrigé, comme n'importe quel autre bug. –

Répondre

1

Comme mentionné dans les commentaires, la meilleure solution consiste à mettre à jour les champs d'avoir ids uniques. Toutefois, en supposant que cela ne soit pas possible, vous pouvez résoudre le problème à l'aide d'un localisateur :index. L'objet page suivante trouve le 2ème champ de couleur, ce qui équivaut à @b.text_field(:id => 'color', :index => 1).set de Watir:

class MyPage 
    include PageObject 

    text_field(:color_1, id: 'color', index: 0) 
    text_field(:color_2, id: 'color', index: 1) 
end 

Ce qui serait appelé comme:

page = MyPage.new(browser) 
page.color_1 = 'red' 
page.color_2 = 'blue' 

Si vous essayez réellement le dernier champ, à savoir reproduire @b.text_fields(:id => 'color').last.set , le :index serait « -1 »:

text_field(:color_2, id: 'color', index: -1) 

Notez que peut être fait semblable lors de la localisation des champs dynamiques ment dans une méthode (par opposition à définie par un accesseur):

class MyPage 
    include PageObject 

    def set_colors(color_1, color_2) 
    text_field_element(id: 'color', index: 0).value = color_1 
    text_field_element(id: 'color', index: 1).value = color_2 
    end 
end 
0
@b.text_fields(:id=>'color',:index=>1).set "red" 

Cela peut résoudre votre problème.

+1

Je crois que la question est à la recherche d'une solution de gem page-objet par opposition à une solution pure Watir. –

+0

Justin Ko, Oui vous avez raison.Ma erreur – saruchi