Frage

Ich unterstütze derzeit einen Proof of Concept unter Verwendung von Selenium 2 / Webdriver mit C# gegen eine ASP.NET -MVC -Anwendung mit dem InternetExplorerDriver.

Die Anwendung verwendet ein Standardmuster, um Benutzer zu benachrichtigen, die ein Datensatz gespeichert hat. Dies erfolgt nach Einstellungen tempdata, um "Aufzeichnungsaufnahme erfolgreich" enthalten. Wenn Tempdata in der Ansicht vorhanden ist, alarmiert die Ansicht die Nachricht.

Während wir an Selenium -Tests für diese Funktionalität arbeiten, erhalten wir unbeständiges Verhalten aus dem folgenden C# / Selenium -Testcode:

        _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")); 

Ungefähr 50% der Fälle wird Selinium mit a scheitern

Openqa.selenium.noalertPresentException: Keine Warnung ist aktiv

Ich kämpfe darum, einen genauen Weg zu finden, um das Problem zu replizieren und mir Sorgen um den Inkonsistenzaspekt zu machen. Wenn es konsequent fehlschlägt, könnten wir das Problem debuggen und verfolgen.

War es hilfreich?

Lösung

Der Umgang mit Warnungen und Aufforderungen in Selenium 2 ist ziemlich neu und steht noch in aktiver Entwicklung. Ihre Fehler sind wahrscheinlich auf das Timing zurückzuführen, daher würde ich empfehlen, eine Wrapper -Methode um den Anruf zum Switchto () zu schreiben. Alert (), damit Sie die OpenQA.Selenium.noalertPresentException fangen und ignorieren, bis die Zeitüberschreitung abgelaufen ist.

Etwas so Einfaches sollte funktionieren:

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
}

Diese Linie

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

würde dann werden

IAlert alert = wait.Until(drv => AlertIsPresent(drv));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top