Je suis assez nouveau dans l'utilisation de python dans le sélénium.

J'ai essayé de sélectionner un bouton sur ma page Web. Voici le morceau de HTML qui apparaît après avoir inspecté l'élément du bouton:

<a class="btn col-xs-3 nav-btns" ui-sref="salt.dashboard.reports.minions" href="/dashboard/reports/minions/">

    <span class="ssIcons-icon_reports salt-icon-3x ng-scope active" bs-tooltip="" data-title="Reports" container="body" placement="bottom" animation="none" data-trigger="hover" ng-class="{'active': state.current.name =='salt.dashboard.reports' … || state.current.name =='salt.dashboard.reports.minions'}">

    ::before
    </span>

</a>

J'ai essayé tout ce que je pouvais penser. Voici quelques-unes des choses que j'ai essayées:

element = driver.find_element_by_class_name("btncol-xs-3")
element = driver.find_element_by_name("Reports")
element = driver.find_element_by_id("Reports")

L'erreur que je reçois est:

selenium.common.exceptions.NoSuchElementException: Message: Impossible de localiser l'élément: {"method": "class name", "selector": "salt.dashboard.reports"} Stacktrace: sur FirefoxDriver.prototype.findElementInternal_ (fichier: // /tmp/tmpoRPJXA/extensions/fxdriver@googlecode.com/components/driver-component.js:10299) sur FirefoxDriver.prototype.findElement (fichier: ///tmp/tmpoRPJXA/extensions/fxdriver@googlecode.com/components/driver -component.js: 10308) à DelayedCommand.prototype.executeInternal_ / h (fichier: ///tmp/tmpoRPJXA/extensions/fxdriver@googlecode.com/components/command-processor.js: 12282) à DelayedCommand.prototype (.executeInternal) file: ///tmp/tmpoRPJXA/extensions/fxdriver@googlecode.com/components/command-processor.js: 12287) à DelayedCommand.prototype.execute / <(fichier: /// tmp / tmpoRPJXA / extensions / fxdriver @ googlecode .com / components / command-processor.js: 12229) root @ chris-salt: / home / chris / Documents / projects / python-selenium #

0
Chris 15 juil. 2015 à 22:27

2 réponses

Meilleure réponse

Trouvez l'élément par data-title:

driver.find_element_by_css_selector("span[data-title=Reports]")

Ou, si vous devez accéder à la balise a:

driver.find_element_by_xpath("//a[span/@data-title = 'Reports']")
1
alecxe 15 juil. 2015 à 19:38

Chris,

L'étendue que vous avez collée n'a pas d'attribut nommé id.

De plus, votre sélecteur de classe est trop large, je suggère d'utiliser un chemin plus explicite suivant la structure dom. Gardez à l'esprit que plusieurs éléments peuvent avoir ce nom de classe.

En outre, vous essayez de rechercher par le nom d'attribut, que vous n'avez pas dans cet élément.

Enfin, il semble que vous utilisiez peut-être angular. L'entrée que vous recherchez est-elle créée avec javascript de manière dynamique?

Et aussi, pourquoi utilisez-vous root pour faire ces tests?

Avant de faire les affirmations, pouvez-vous stocker le code HTML résultant et vérifier manuellement que vous avez bien cet élément ?.

0
Jorge Omar Vázquez 15 juil. 2015 à 19:39