我正在寻找验证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));
答案 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."));