web-dev-qa-db-fra.com

trouver bouton de soumission en sélénium sans identifiant

J'ai un bouton 

<input type="submit" class="button button_main" style="margin-left: 1.5rem;" value="something">

Je ne peux pas le trouver par nom ou identifiant et j'ai besoin de soumettre un formulaire.

J'ai essayé de faire ceci: Alternativement, WebDriver utilise la méthode pratique «submit» sur chaque élément. Si vous appelez cela sur un élément d'un formulaire, WebDriver parcourra le DOM jusqu'à ce qu'il trouve le formulaire englobant, puis appelle submit. Si l'élément n'est pas dans un formulaire, l'exception NoSuchElementException sera levée: Element.submit () http://Selenium-python.readthedocs.org/navigating.html

Mais cela ne trouve pas non plus le sélecteur de soumission.

des idées?

6
humanbeing

Il y a beaucoup d'options ici, pour n'en nommer que quelques-unes:

Si la classe seule est unique, vous pouvez utiliser

driver.find_element_by_css_selector(".button_main").click()

Si la combinaison classe + valeur est unique, vous pouvez utiliser:

driver.find_element_by_css_selector(".button_main[value='something']").click()

Vous pouvez également utiliser xpath:

driver.find_element_by_xpath("//input[@type='submit' and @value='something']").click()

Si aucun de ceux-ci ne fonctionne (c'est-à-dire qu'ils n'identifient pas le bouton de manière unique), examinez les éléments situés au-dessus du bouton (par exemple <form) et indiquez le xpath au format

driver.find_element_by_xpath("//unique_parent//input[@type="submit" and @value='something']").click()
13
Kiril S.

je recommande l'extension xpath chrome, avec laquelle vous pourrez obtenir le chemin en exécutant l'extension et en cliquant sur l'élément de votre choix en cliquant sur Maj. https://chrome.google.com/webstore/detail/xpath- helper/hgimnogjllphhhkhlmebbmlmljjjjpjl enter image description here

1
Nelson Bwogora

Vous pouvez essayer de trouver l'élément avec une expression XPath ou un sélecteur CSS comme input [type = "button"], puis de cliquer simplement sur l'élément.

1
NicoPaez