2010-10-05 15 views
1

J'essaye de mettre en place des tests d'interface utilisateur dans Watir pour notre application web. Je rencontre des problèmes pour propager les événements click. Nous utilisons EXTJS pour faire des onglets, qui sont des travées dans le html résultant.Comment puis-je faire fonctionner les événements click lors du chaînage d'éléments dans Watir?

Si je sélectionne une période comme cela, il fonctionne:

span1 = @browswer.span(:text=>"Tab Name") 
span1.click 

Le problème est quand j'ai un sous-onglet avec le même nom et que vous souhaitez être en mesure de les différencier. La seule façon que j'ai trouvée pour sélectionner explicitement le sous-onglet est de sélectionner d'abord la liste dans laquelle se trouve le sous-onglet, puis de sélectionner le sous-onglet à partir de celui-ci.

ul = @browser.ul(:class=>/tab-strip-bottom/) 
span2 = ul.span(:text=>"Tab Name") 
span2.click 

span2.click ne semble pas faire quoi que ce soit. Le seul différent (je peux voir) entre span1 et span2 est l'attribut de conteneur. span1. @ container = @browser, span2. @ container = ul.

J'essayé de placer le récipient sur span2 avec

span2.instance_variable_set("@container", @browser) 

mais je le vent en cliquant sur le mauvais onglet de toute façon. Des pensées à ce sujet? Merci!

+0

Montrez-nous le code HTML. –

+0

    \t Lieux
    \t Emplacements

+0

Les ID ne sont pas statiques. –

Répondre

0

J'ai finalement résolu le problème que j'avais avec xpath. Ce n'est pas idéal parce que le code xpath est assez moche. S'il est possible de sélectionner l'élément en utilisant les sélecteurs "candy" de watir, cela serait beaucoup mieux pour la maintenabilité.

+0

La solution xpath s'avère ne pas être aussi laide que je le pensais au départ. Je peux utiliser des xpaths relatifs concaténés ensemble de la même manière que les méthodes Watir le permettent.Je peux donc avoir une méthode qui renvoie le xpath à la bande d'onglets nécessaire, et une autre pour trouver le xpath pour l'onglet par rapport à la bande d'onglet) et une autre pour trouver un élément de menu (par rapport à l'onglet). Slap ensemble et j'ai un xpath absolu à l'élément en question. –

+0

Parfois, ce genre de chose peut être nécessaire, mais dans votre cas, je pense que vous pouvez simplement utiliser Watir comme il est conçu pour être utilisé. embedded_tab = @ browser.span (: text => "Nom de l'onglet"). Span (: text => "Nom de l'onglet") vous donne l'onglet intégré. Ou mieux encore: parent_tab = @ browser.div (: id, 'somethingUnique') portée. (: Text => "Nom de l'onglet") child_tab = parent_tab.span (: text => "Nom de l'onglet") donnera toujours l'onglet parent (non-incorporé) (remplacez div par quelque chose de réel) et l'onglet enfant par rapport à cela. Cela supprime le besoin de déboguer vos 3 fonctions et décrypter le XPath pour comprendre ce que fait votre code. – JEH

0

Vous pouvez spécifier un index à utiliser lorsqu'il existe plusieurs objets correspondants. Est-ce que ça marche pour toi?

@browser.span(:text=>"Tab Name", :index => 2).click 

Les valeurs de l'indice sont par rapport au conteneur que vous recherchez dans Pour une table de toutes les possibilités d'utiliser lors de la recherche d'objets voir. HTML Elements Supported By Watir

0

Nous avons eu un menu de la page Web avec plusieurs niveaux, ressemble à ce que vous avez. La souris lâcherait le second niveau du menu en passant à la sélection suivante (directement en diagonale) et le deuxième niveau du menu se fermerait. Est-ce ce dont vous parlez? Nous l'avons résolu en tirant du javascript car les éléments du menu s'appelaient javascript (la solution de Zeljko). Nous avions juste besoin de noter les identifiants des éléments du menu. Je ne sais pas si c'est plus laid ou plus joli que la solution xpath. Je dis «nous» parce que j'avais besoin d'aide pour ça.