3

I am writing a Selenium test on Firefox that deals with an alert. The alert appears for a fraction of a second when the test is run, but when done manually the alert persists. Can anyone tell why this is the case?

I tried setting this profile on Firefox, but that did not help either:

profile.setPreference("alerts.disableSlidingEffect", true);

Can anyone tell how I can make the alert stay on the page?

In the code, I am checking the presence of the alert as this, which apparently is never getting hit since the alert is disappearing too quick:

WebDriverWait wait = new WebDriverWait(webDriver, Long.parseLong(parameters[0]));
wait.until(ExpectedConditions.alertIsPresent());
techjourneyman
  • 1,701
  • 3
  • 33
  • 53

3 Answers3

2

There are 3 states for UnexpectedAlertBehaviour:

  1. ACCEPT - Accepts the alert
  2. DISMISS - Closes/Cancels the alert
  3. IGNORE - Neither accepts nor closes the alert
DesiredCapabilities dc = new DesiredCapabilities();
dc.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.IGNORE);
driver = new FirefoxDriver(dc);

Then you can handle the alert by performing the operation that triggers the alert and catching it as an expected exception:

try {
    click(myButton);
} catch (UnhandledAlertException f) {
    try {
        Alert alert = driver.switchTo().alert();
        String alertText = alert.getText();
        System.out.println("Alert data: " + alertText);
        alert.accept();
    } catch (NoAlertPresentException e) {
        e.printStackTrace();
    }
}
Zeeshan S.
  • 2,041
  • 2
  • 21
  • 40
1

The chosen answer worked for me, but it seems that FirefoxDriver(org.openqa.selenium.Capabilities) is deprecated. The working alternative is:

FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.IGNORE);
driver = new FirefoxDriver(firefoxOptions);
Alex
  • 357
  • 2
  • 15
0

I don't think the 'alerts.disableSlidingEffect' Firefox profile option should be causing the alert to disappear - Instead, try creating your WebDriver instance using the unexpectedalertbehaviour capability set to 'ignore'.

Tom Trumper
  • 472
  • 2
  • 8