How can I reliably wait for JavaScript alerts using Selenium2 / WebDriver?

Hope this will be helpful for waiting and click

WebDriverWait(driver,4).until(EC.alert_is_present())
driver.switch_to.alert.accept()

The handling of alerts and prompts within Selenium 2 is pretty new and is still under active development. Your failures are probably due to timing, so I would suggest writing a wrapper method around the call to SwitchTo().Alert() so that you catch the OpenQA.Selenium.NoAlertPresentException and ignore it until the timeout expires.

Something as simple as this should work:

private IAlert AlertIsPresent(IWebDriver drv)
{
    try
    {
        // Attempt to switch to an alert
        return drv.SwitchTo().Alert();
    }
    catch (OpenQA.Selenium.NoAlertPresentException)
    {
        // We ignore this execption, as it means there is no alert present...yet.
        return null;
    }

    // Other exceptions will be ignored and up the stack
}

This line

IAlert alert = wait.Until(drv => drv.SwitchTo().Alert());

would then become

IAlert alert = wait.Until(drv => AlertIsPresent(drv));