我目前正在使用Internet ExpplorerDriver使用c#的selenium 2 / web驱动程序来协助使用selenium 2 / web驱动器对ASP.NET MVC应用程序进行协助证明。

该应用程序使用标准模式通知用户记录已保存。这可以通过设置tempdata来处理“成功保存的记录”,如果在视图中存在tempdata,则视图将警告消息。

在研究此功能的硒测试的同时,我们从以下C# /硒测试代码中收到不构度的行为:

        _driver.Navigate().GoToUrl(_baseUrl + "/Amraam/List");
        _driver.FindElement(By.LinkText("Create New")).Click();

        _driver.FindElement(By.Id("txtAmraamSerialNumber")).SendKeys("CC12345");

        var selectElement = new SelectElement(_driver.FindElement(By.Id("LocationId")));
        selectElement.SelectByText("Tamworth");
        _driver.FindElement(By.Id("btnSave")).Click();
        var wait = new WebDriverWait(_driver, defaultTimeout);
        IAlert alert = wait.Until(drv => drv.SwitchTo().Alert());
        _alertText = alert.Text;

        alert.Accept();
        Assert.That(_alertText, Is.EqualTo("Record successfully saved")); 

大约50%的时间,Selinium将失败

OpenQA.SELENIUM.NOALERTPRESENTEXCEPTION:没有警报处于活动状态

我很难找到一种复制问题的确切方法,并担心不一致方面。如果它持续失败,那么我们可以调试并跟踪问题。

有帮助吗?

解决方案

硒2中的警报和提示的处理非常新,并且仍在积极发展。您的失败可能是由于时间的造成的,因此我建议您围绕调用switchto()。alert()编写包装器方法,以便您捕获OpenQA.Selenium.NoAlertPresentException,并忽略它,直到超时到期。

这样简单的事情应该起作用:

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
}

这线

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

然后会变成

IAlert alert = wait.Until(drv => AlertIsPresent(drv));
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top