web-dev-qa-db-fra.com

Erreur de génération de sélénium "L'élément n'est pas interactif"

enter image description here

J'essaie d'utiliser Selenium pour cliquer sur le bouton mis en évidence ci-dessus. Je n'ai aucun problème à localiser l'élément via:

download_button_path = "//button[@class='btn-primary']"
download_button = driver.find_element_by_xpath(download_button_path)

Cependant, quand j'essaie d'exécuter

download_button.click()

Je reçois le message d'erreur:

ElementNotVisibleException: Message: element not interactable
  (Session info: chrome=70.0.3538.67)
  (Driver info: chromedriver=2.42.591059 (a3d9684d10d61aa0c45f6723b327283be1ebaad8),platform=Mac OS X 10.11.6 x86_64)

Il semble que le bouton ne soit pas visible pour Selenium même si je suis capable de le voir lors de l'exécution du clic manuellement.

J'ai également essayé de survoler le bouton, puis de cliquer, ainsi que d'envoyer une touche Entrée/Retour au bouton, mais rien ne fonctionne.

Toute idée serait appréciée.

4
Daniel Schissler

Dans le HTML, je vois que le btn-primaire est présent dans un bootstrap popup modal. Donc il peut y avoir un autre btn-primary derrière le pop modal. Le XPath trouvera l'élément qui est derrière le modal qui n'est pas interactif.

la classe btn-primary est une classe générique dans bootstrap qui sera utilisée dans tous les boutons primaires. Essayez avec un localisateur unique en référence à l'élément modal en tant que parent dans votre localisateur

download_button_path = "//[@class='lmn-edititem-modal']/../[@class=''btn-primary']"
wait = WebDriverWait(driver, 10)
download_button = wait.until(EC.visibility_of_element_located((By.XPATH, download_button_path)))
download_button .click()

Nous pouvons également essayer ceci avec le sélecteur CSS

driver.find_elements_by_css_selector(".lmn-edititem-modal .btn-primary") 
5
Navarasu

Pour moi, l'extension de Xpath relative juste avec son parent a aidé.

button = driver.find_element_by_xpath("//button[@data-value='0']")
button.click()
#this did not work

button = driver.find_element_by_xpath("//section[2]/button[@data-value='0']")
button.click()
#this worked well
0
Thomasko