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
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()
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
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!
Si vous voulez accepter ou cliquer sur la fenêtre contextuelle, peu importe la raison
alert.accept
Où alert
est un objet de la classe Selenium.webdriver.common.alert.Alert(driver)
Et accept
est une méthode de cet objet
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