Selenium C#查找警报并验证文本

时间:2015-04-10 15:47:55

标签: c# selenium

我正在寻找验证javascript警报发生的示例。我有一个脚本进入登录页面,并尝试登录系统。我有一个成功登录的测试用例,我正在尝试处理失败的登录案例。对于自动化最佳实践的任何建议将不胜感激。因此,将问题归结为简单"如何验证我的网页上是否发生此警报?"

HTML

<div class="alert">
The username and/or password entered are invalid.</div>

测试

    [Test]
    public void failedCustomerLogin()
    {
        //Finding the customer login link and clicking it
        var customerLogin = driver.FindElement(By.Id("Homepage_r2_c14"));
        customerLogin.Click();

        Assert.AreEqual("http://stage.blank.net/login", driver.Url);

        var userName = driver.FindElement(By.Id("username"));
        userName.SendKeys("badCustomerName");

        var Pasw = driver.FindElement(By.Id("password"));
        Pasw.SendKeys("BadPassword");

        var submit = driver.FindElement(By.Id("btnSubmit"));
        submit.Click();

        //TODO: need to find failed method
        string errorText = driver.SwitchTo().Alert().Text;
        Assert.IsTrue(errorText.Contains("The username and/or password entered are invalid."));
    }

等待Selenium

        //Waiting for error to display
        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(60));

2 个答案:

答案 0 :(得分:2)

根据您使用的测试框架和断言,尝试以下内容并断言是否存在预期的文本。

string text = Driver.SwitchTo().Alert().Text;

我使用 NUnit 断言,在我看来,它看起来像以下

string text = Driver.SwitchTo().Alert().Text;

Assert.IsTrue(text.Contains("The username and/or password entered are invalid."));

第二次修改:添加明确等待

尝试添加显式等待

Driver.FindElement(By.TagName("test")).Click();

//Make sure the click above generates the alert
String text = (new WebDriverWait(Driver, TimeSpan.FromSeconds(10))).Until(d => d.SwitchTo().Alert().Text);
Assert.IsTrue(text.Contains("The username and/or password entered are invalid."));

答案 1 :(得分:1)

这是实际适用于给定警报的代码,因为Saifur指出警报实际上不是警报。我能够深入到课程级别并使用以下代码验证文本是否出现在屏幕上。

        var errorMessage = driver.FindElement(By.XPath("//div[contains(@class, 'alert')]"));
        Assert.IsTrue(driver.PageSource.Contains("The username and/or password entered are invalid."));