2016-08-23 1 views
1

Ceci est dans la même veine que cette question que j'ai posée auparavant - Watir webdriver; counting elements with changing class names. J'ai été en mesure d'ajouter le nombre spécifique d'éléments basés sur l'utilisation du nom de classe asset-card selectable.Localisation des éléments sans nom de classe spécifique

Actuellement, je cherche à cliquer sur plus d'éléments à ajouter à l'ensemble existant. Voici mon dilemme:

  • Lorsqu'un élément n'est pas cliquez dessus, le nom de classe est:
    image-card asset-card selectable
  • Lorsqu'un élément est cliqué, selected est ajouté au nom de la classe:
    image-card asset-card selectable selected

Dans mon cas, j'essaie de rechercher des éléments supplémentaires que seulement dire image-card asset-card selectable et ne pas inclure selected. Je ne suis pas sûr de savoir comment les localiser explicitement.

Existe-t-il une solution regex ou d'autres réflexions sur la façon d'aborder cela?

Répondre

2

La méthode la plus simple pour rechercher un élément sans une certaine classe consiste à utiliser un localisateur :css.

browser.divs(css: 'div.image-card.asset-card.selectable:not(.selected)') 

Une explication des sélecteurs CSS-:

  • div - C'est le nom de la balise des éléments que vous essayez de faire correspondre
  • .image-card.asset-card.selectable - Voici la liste des classes que vous voulez que la éléments correspondants aient
  • :not(.selected) - C'est la liste des classes que vous ne pas vouloir les éléments correspondants aient

Si vous êtes opposé aux sélecteurs CSS, vous pouvez parcourir les éléments. Notez que cela sera plus lent car il doit faire plus d'appels au navigateur.

selectable = browser.divs(class: 'image-card asset-card selectable') 
unselected = selectable.reject { |e| e.class_name.split(' ').include?('selected') } 

J'ai essayé d'utiliser une expression régulière avant (voir my blog post), mais il est assez compliqué. Je ne recommanderais pas d'aller de cette façon.

+0

Merci! Cela a fait l'affaire et par la suite résolu mon autre problème avec la sélection d'autres cartes sur l'écran! – kmancusi