Selenium 警报处理测试方法/设计模式
Selenium alert handling testing approach/ Design pattern
我是 Selenium 的新手,我正在尝试典型的登录页面自动化并遇到以下情况,我想知道处理这种情况的专业方法。
场景
使用有效和无效凭证测试应用程序登录页面。当我输入无效的凭据时,会出现一个弹出窗口,通知用户您输入了错误的用户名或密码。
我的方法
我创建了一个页面对象 class 以使用页面工厂保存所有 Web 元素,并使用一些 public 方法将 Web 元素暴露给外部 class。
在测试中 class 我创建了被测页面的对象并使用 testng xml.
传递了登录凭据
然后我运行 Testng 套装 运行 没问题。但问题是当我传递无效凭据时,弹出窗口 window 即将到来,因为我没有为弹出窗口 window 编码,所以我遇到了异常。
我知道如何处理弹出窗口,但我真正的问题是我是否应该编写不同的测试 class 来处理无效凭据。或者我的问题如何为两个不同的输出编写通用代码,即当我输入有效凭据时,它会转到主页,当我输入无效时,我会弹出窗口,我将进入登录状态,这实际上是例外的,我的测试用例应该通过。
Login.java
public void loginToGuru99(String userName,String password){
this.setUsername(userName);
this.setPassword(password);
this.clickOnLogin();
}
TestGuru99LoginPage.java
@BeforeTest
public void setup() {
driver= new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://demo.guru99.com/V4/");
}
// @Test(dataProvider="Authentication")
@Test
@Parameters({ "sUsername", "sPassword" })
public void TestGuru99LoginPage(String sUsername,String sPassword) {
login= new Guru99LoginPage(driver);
homePage= new Guru99HomePage(driver);
try{
login.loginToGuru99(sUsername, sPassword);
Assert.assertTrue(homePage.getHomePageDashboardUserName().toLowerCase().contains("manger id : mngr13564"));
}catch(Exception e){
e.printStackTrace();
}
}
Utils.java
public static boolean isAlertPresent() {
try {
driver.switchTo().alert();
return true;
} catch (NoAlertPresentException e) {
return false;
}
}
public static String closeAlertAndGetItsText() {
try {
Alert alert = driver.switchTo().alert();
String alertText = alert.getText();
if (acceptNextAlert) {
alert.accept();
} else {
alert.dismiss();
}
return alertText;
} finally {
acceptNextAlert = true;
}
}
请让我知道开始的最佳方法。
谢谢,
迪普奈尔
由于您期望两个测试用例的结果不同,因此您必须使用不同的断言,但您可以使用 PageObject 中的相同方法。如您所见,第一个会在您登录后通过,而第二个只有在您未登录时才会通过。
@Test
public void validLogin() {
// ...
String username = "validUsername";
String password = "validPassword";
login.clickOnLoginButton(username, password);
Assert.assertTrue(homePage.getHomePageDashboardUserName().toLowerCase().contains("manger id : mngr13564"));
}
@Test
public void invalidLogin() {
String username = "invalidUsername";
String password = "invalidPassword";
login.clickOnLoginButton(username, password);
Assert.assertFalse(homePage.getHomePageDashboardUserName().toLowerCase().contains("manger id : mngr13564"));
}
我是 Selenium 的新手,我正在尝试典型的登录页面自动化并遇到以下情况,我想知道处理这种情况的专业方法。
场景 使用有效和无效凭证测试应用程序登录页面。当我输入无效的凭据时,会出现一个弹出窗口,通知用户您输入了错误的用户名或密码。
我的方法
我创建了一个页面对象 class 以使用页面工厂保存所有 Web 元素,并使用一些 public 方法将 Web 元素暴露给外部 class。
在测试中 class 我创建了被测页面的对象并使用 testng xml.
传递了登录凭据
然后我运行 Testng 套装 运行 没问题。但问题是当我传递无效凭据时,弹出窗口 window 即将到来,因为我没有为弹出窗口 window 编码,所以我遇到了异常。
我知道如何处理弹出窗口,但我真正的问题是我是否应该编写不同的测试 class 来处理无效凭据。或者我的问题如何为两个不同的输出编写通用代码,即当我输入有效凭据时,它会转到主页,当我输入无效时,我会弹出窗口,我将进入登录状态,这实际上是例外的,我的测试用例应该通过。
Login.java
public void loginToGuru99(String userName,String password){
this.setUsername(userName);
this.setPassword(password);
this.clickOnLogin();
}
TestGuru99LoginPage.java
@BeforeTest
public void setup() {
driver= new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://demo.guru99.com/V4/");
}
// @Test(dataProvider="Authentication")
@Test
@Parameters({ "sUsername", "sPassword" })
public void TestGuru99LoginPage(String sUsername,String sPassword) {
login= new Guru99LoginPage(driver);
homePage= new Guru99HomePage(driver);
try{
login.loginToGuru99(sUsername, sPassword);
Assert.assertTrue(homePage.getHomePageDashboardUserName().toLowerCase().contains("manger id : mngr13564"));
}catch(Exception e){
e.printStackTrace();
}
}
Utils.java
public static boolean isAlertPresent() {
try {
driver.switchTo().alert();
return true;
} catch (NoAlertPresentException e) {
return false;
}
}
public static String closeAlertAndGetItsText() {
try {
Alert alert = driver.switchTo().alert();
String alertText = alert.getText();
if (acceptNextAlert) {
alert.accept();
} else {
alert.dismiss();
}
return alertText;
} finally {
acceptNextAlert = true;
}
}
请让我知道开始的最佳方法。
谢谢, 迪普奈尔
由于您期望两个测试用例的结果不同,因此您必须使用不同的断言,但您可以使用 PageObject 中的相同方法。如您所见,第一个会在您登录后通过,而第二个只有在您未登录时才会通过。
@Test
public void validLogin() {
// ...
String username = "validUsername";
String password = "validPassword";
login.clickOnLoginButton(username, password);
Assert.assertTrue(homePage.getHomePageDashboardUserName().toLowerCase().contains("manger id : mngr13564"));
}
@Test
public void invalidLogin() {
String username = "invalidUsername";
String password = "invalidPassword";
login.clickOnLoginButton(username, password);
Assert.assertFalse(homePage.getHomePageDashboardUserName().toLowerCase().contains("manger id : mngr13564"));
}