Selenium 警报处理测试方法/设计模式

Selenium alert handling testing approach/ Design pattern

我是 Selenium 的新手,我正在尝试典型的登录页面自动化并遇到以下情况,我想知道处理这种情况的专业方法。

场景 使用有效和无效凭证测试应用程序登录页面。当我输入无效的凭据时,会出现一个弹出窗口,通知用户您输入了错误的用户名或密码。

我的方法

  1. 我创建了一个页面对象 class 以使用页面工厂保存所有 Web 元素,并使用一些 public 方法将 Web 元素暴露给外部 class。

  2. 在测试中 class 我创建了被测页面的对象并使用 testng xml.

  3. 传递了登录凭据

然后我运行 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"));
}