在不使用Thread.sleep的情况下执行单击网页后等待警报弹出

时间:2014-07-03 06:12:17

标签: c# selenium

点击网页上的搜索后,会出现提示弹出窗口。我需要等到弹出窗口出现。我不必使用Thread.sleep。

6 个答案:

答案 0 :(得分:1)

ExpectedConditions类具有特定的等待警告弹出窗口。

WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
wait.until(ExpectedConditions.alertIsPresent());

答案 1 :(得分:0)

您可以使用wait命令:

WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<locator>));

答案 2 :(得分:0)

ExpectedConditions已过时,因此请尝试使用此功能:

        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
        wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.AlertIsPresent());

C# Selenium 'ExpectedConditions is obsolete'

答案 3 :(得分:0)

尝试此操作,缺点是此操作没有超时。必须确保将显示弹出窗口。

while (driver.WindowHandles.Count == 1)
{
    //leave it blank
}

答案 4 :(得分:0)

那呢?

public static class SeleniumExtensions
{
    public static IAlert WaitAlert(this ITargetLocator locator, int seconds = 10)
    {
        while (true) 
        {
            try { return locator.Alert(); }
            catch (NoAlertPresentException) when (--seconds >= 0) { Thread.Sleep(1000); }
        }
    }
}

为我工作:

var alert = _driver.SwitchTo().WaitAlert();

答案 5 :(得分:-1)

它有点粗鲁,但为我工作。

public IAlert WaitAlert(int timeOut)
    {
        for (int cont = timeOut; cont > 0; cont--)
        {
            try
            {
                return driver.SwitchTo().Alert();
            }
            catch (NoAlertPresentException erro)
            {
                Thread.Sleep(TimeSpan.FromSeconds(0.5));
            }
        }
        throw new NoAlertPresentException();
    }