Skip to content Skip to sidebar Skip to footer

Webdriver Error: "no Alert Is Present" After Unexpectedalertpresentexception Is Thrown

I'm trying to test a webapp I'm developing. I'm using the Firefox driver against Firefox 22.0. At one point, a modal dialog may pop up (a Javascript prompt()). If it does, I want t

Solution 1:

I think Selenium closes unexpected alerts. Apparently you can change how the firefox driver treats unexpected alerts: How to handle an Alert with "UnexpectedAlertBehaviour" capability in Selenium?

As an alternative, you could check if there is an alert before acting (after all, if you want handle the alert it's not unexpected) like so (Java):

try {
  Alertalert= _driver.switchTo().alert();
  //do stuff with alert
} catch (final NoAlertPresentException e) {
  //do non-alert stuff
}

Solution 2:

I may not be the best python programmer, because i started with it 1 week ago. I've manage myself to create a small function that will accept ANY alert, and also will do it more alerts.

Chaging the IF to WHILE at line -2 (second from tail) we can handle also consecutive confirmations/alerts. Using IF you can handle replies of confirm() Using WHILE you can handle all the alerts(). If the alert is under a timeout, you have to try "bypass" the alert() on the correct moment.

I've manage to add 2 exception handlers, to bypass uknown alerts() and also to stop when no alert() is present.

import selenium
from selenium import webdriver
import os
import time
from selenium.common.exceptions import UnexpectedAlertPresentException
from selenium.common.exceptions import NoAlertPresentException

os.system("pkill php")
os.system("php -S localhost:2222 alert.html &")

fire = webdriver.Firefox()
fire.get("http://localhost:2222")
global alert

defalert_accept():
  try:
    alert = fire.switch_to_alert()
    print"Aler text:" + alert.text
    alert.accept()
    print"Alert detected, accept it"returnTrueexcept UnexpectedAlertPresentException:
    print"Hum..., continue?"returnFalseexcept NoAlertPresentException:
    print"No alert here"returnFalsewhile alert_accept() == True:
  alert_accept()

You cant test it with any website. I've make a local html with some different alerts to digg a little on that.

HTML code:

<scripttype="text/javascript">var c = confirm("Do you like kidding yourself?")
if (c == true) {
  alert("true")
} else {
  alert("You're the kidding master, another alert!")
}
</script><scripttype="text/javascript">var c = confirm("Do you like kidding yourself?")
if (c == true) {
  alert("true")
} else {
  alert("You're the kidding master, another alert!")
}
</script><scripttype="text/javascript">console.log("Running test with timeout")
</script><scripttype="text/javascript">setTimeout(function(){ 
  var c = confirm("Do you like kidding yourself?")
if (c == true) {
  alert("true")
} else {
  alert("You're the kidding master, another alert!")
}
 }, 5000)
</script>

Actually, the WHILE nor the IF handles the full page, i guess because the timeout. If you put all at onces it does.

Im pretty sure that this can be done using implicit waits and the expected conditions with a shortest code. If you take a look of the source of alert_is_present you will se nothing than a try:block with return true/false.

Solution 3:

For my case I need to click on Upload button without selecting File and check that an alert message is coming or not. But in my case while clicking on Upload button the below exception is coming selenium.common.exceptions.UnexpectedAlertPresentException: Alert Text: Message: Modal dialog present In my case alert.accept or alert.dismiss is not working So, I did to press Tab and select the Upload button and Press Enter Key through Python Code. Its working perfect.

Post a Comment for "Webdriver Error: "no Alert Is Present" After Unexpectedalertpresentexception Is Thrown"