web-dev-qa-db-fra.com

Cliquez sur le popup javascript via webdriver

Je gratte une page Web avec Selenium WebDriver en Python

La page Web sur laquelle je travaille a une forme. Je peux remplir le formulaire puis je clique sur le bouton Soumettre.

Il génère une fenêtre popup (alerte Javascript). Je ne sais pas trop comment cliquer sur la fenêtre contextuelle via WebDriver.

Une idée comment le faire?

Merci

16
Kiran

Script Webdriver Python:

from Selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://sandbox.dev/alert.html")
alert = browser.switch_to_alert()
alert.accept()
browser.close()

Page Web (alert.html):

<html><body>
    <script>alert("hey");</script>
</body></html>

L'exécution du script webdriver ouvre la page HTML qui affiche une alerte. Webdriver passe immédiatement à l'alerte et l'accepte. Webdriver ferme ensuite le navigateur et se termine.

Si vous n'êtes pas sûr qu'il y aura une alerte, vous devez détecter l'erreur avec quelque chose comme ceci.

from Selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://sandbox.dev/no-alert.html")

try:
    alert = browser.switch_to_alert()
    alert.accept()
except:
    print "no alert to accept"
browser.close()

Si vous devez vérifier le texte de l'alerte, vous pouvez obtenir le texte de l'alerte en accédant à l'attribut textuel de l'objet d'alerte:

from Selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://sandbox.dev/alert.html")

try:
    alert = browser.switch_to_alert()
    print alert.text
    alert.accept()
except:
    print "no alert to accept"
browser.close()
23
Mike Grace
from Selenium import webdriver
from Selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
#do something
if EC.alert_is_present:
    print "Alert Exists"
    driver.switch_to_alert().accept()
    print "Alert accepted"
else:
    print "No alert exists"

Plus d'informations sur excepted_conditions https://seleniumhq.github.io/Selenium/docs/api/py/webdriver_support/Selenium.webdriver.support.expected_conditions.html

4

J'utilise des liaisons Ruby, mais voici ce que j'ai trouvé dans la documentation de Selenium Python Bindings 2: http://readthedocs.org/docs/Selenium-python/en/latest/index.html

Selenium WebDriver a un support intégré pour la gestion des boîtes de dialogue contextuelles. Une fois que vous avez déclenché une action et ouvert une fenêtre contextuelle, vous pouvez accéder à l'alerte avec les éléments suivants:

alert = driver.switch_to_alert()

Maintenant, je suppose que vous pouvez faire quelque chose comme ça:

if alert.text == 'A value you are looking for'
  alert.dismiss
else
  alert.accept
end

J'espère que ça aide!

1
Yulia

Si vous voulez accepter ou cliquer sur la fenêtre contextuelle, peu importe la raison

alert.accept

alert est un objet de la classe Selenium.webdriver.common.alert.Alert(driver) Et accept est une méthode de cet objet

La source

1
Gaurav Gandhi

cela dépend de la fonction javascript qui gère la soumission du formulaire s'il n'existe pas de telle fonction, essayez de soumettre le formulaire à l'aide de post

0
simonzack