Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns Selenium警报处理测试方法/设计模式_Design Patterns_Selenium Webdriver_Testng_Pageobjects - Fatal编程技术网

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

Design patterns Selenium警报处理测试方法/设计模式,design-patterns,selenium-webdriver,testng,pageobjects,Design Patterns,Selenium Webdriver,Testng,Pageobjects,我是Selenium的新手,我正在尝试典型的登录页面自动化,遇到以下场景,我想知道处理这种情况的专业方法 情景 使用有效和无效凭据测试应用程序登录页。当我输入无效凭据时,会弹出一个窗口,通知用户您输入了错误的用户名或密码 我的方法 我创建了一个page对象类,使用page Factory保存所有Web元素,并使用一些公共方法将Web元素公开给类外 在测试类中,我创建了被测试页面的对象,并使用testng xml传递了登录凭据 然后我穿上了Testng套装,它跑得很好。但问题是,当我传递无效凭证时

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

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

我的方法

  • 我创建了一个page对象类,使用page Factory保存所有Web元素,并使用一些公共方法将Web元素公开给类外

  • 在测试类中,我创建了被测试页面的对象,并使用testng xml传递了登录凭据

  • 然后我穿上了Testng套装,它跑得很好。但问题是,当我传递无效凭证时,弹出窗口将出现,因为我没有为popuup窗口编码,所以出现异常

    我知道如何处理弹出窗口,但我真正的问题是我是否应该编写一个不同的测试类来处理无效的凭据。或者我的问题是,我如何为两个不同的输出编写一个通用代码,即当我输入有效凭证时,它将进入主页;当我输入无效凭证时,我将获得popuup,并且我将处于登录状态,这实际上是例外的,我的测试用例应该通过

    Login.java

    public void loginToGuru99(String userName,String password){
        this.setUsername(userName);
        this.setPassword(password);
        this.clickOnLogin();
    }
    
      @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();
          }
      }
    
    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;
            }
          }
    
    TestGuru99LoginPage.java

    public void loginToGuru99(String userName,String password){
        this.setUsername(userName);
        this.setPassword(password);
        this.clickOnLogin();
    }
    
      @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();
          }
      }
    
    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;
            }
          }
    
    Utils.java

    public void loginToGuru99(String userName,String password){
        this.setUsername(userName);
        this.setPassword(password);
        this.clickOnLogin();
    }
    
      @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();
          }
      }
    
    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;
            }
          }
    
    请让我知道开始的最佳方法

    谢谢,
    Deepu Nair

    当您期望两个测试用例的结果不同时,您必须使用不同的断言,但是您可以从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"));
    }
    

    由于您期望两个测试用例都有不同的结果,所以您必须使用不同的断言,但是您可以从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"));
    }
    

    在您的测试中,您正在检查有效的登录方法,因此只有在您使用有效凭据时,您的测试才会通过,而如果您使用的凭据不正确,测试将失败。这不是你所期望的吗?我同意@peetya。您正在尝试测试两件事:有效凭据登录成功,无效凭据登录失败,因此您需要有两种不同的测试方法,如果不是不同的测试类的话。无论您是否通过有效凭据(成功登录或无效凭据(处理弹出窗口),成功测试的值是多少。谢谢您的回复。@peetya根据我的说法,这两个测试用例都应该通过,因为在这两种情况下,我都得到了预期的结果。@user2611581:所以您建议的最佳方法是多用一种方法来处理无效凭据,对吗?我也在考虑避免重复代码。非常感谢。因为我是selenium的新手,所以我需要正在考虑是否有其他方法来实现此目的。@DeepuNair:如果TestGuru99LoginPage.java是您的测试,那么我还建议您考虑将登录和主页的实例化移到@BeforeTest方法,并仅调用
    code
    login.logintogru99(sUsername,sPassword)
    code
    以及Assert.assertTrue或Assert.assertFalse方法..类似于peetya在下面的答案中所做的。在测试中,您正在检查有效的登录方法,因此只有在使用有效凭据时,您的测试才会通过,如果您使用的凭据不好,测试就会失败。这不是您所期望的吗?我同意@peetya。您正在尝试测试两件事:有效凭据登录成功和无效凭据登录失败,因此如果没有不同的测试类,则需要有两种不同的测试方法。无论您通过有效凭据(成功登录或无效凭据)(处理弹出窗口),成功的测试值是多少。谢谢您的回复。@peetya根据我的说法,这两个测试用例都应该通过,因为在这两种情况下,我都得到了预期的结果。@user2611581:所以您建议的最佳方法是多用一种方法来处理无效凭据,对吗?我也在考虑避免重复代码。非常感谢。因为我是selenium的新手,所以我需要正在考虑是否有其他方法来实现此目的。@DeepuNair:如果TestGuru99LoginPage.java是您的测试,那么我还建议您考虑将登录和主页的实例化移到@BeforeTest方法,并仅调用
    code
    login.logintogru99(sUsername,sPassword)
    code
    以及Assert.assertTrue或Assert.assertFalse方法..类似于peetya在下面的答案中所做的。在测试中,您正在检查有效的登录方法,因此只有在使用有效凭据时,您的测试才会通过,如果您使用的凭据不好,测试就会失败。这不是您所期望的吗?我同意@peetya。您正在尝试测试两件事:有效凭据登录成功和无效凭据登录失败,因此如果没有不同的测试类,则需要有两种不同的测试方法。无论您通过有效凭据(成功登录或无效凭据)(处理弹出窗口),成功的测试值是多少。谢谢您的回复。@peetya根据我的说法,这两个测试用例都应该通过,因为在这两种情况下,我都得到了预期的结果。@user2611581:所以您建议的最佳方法是多用一种方法来处理无效凭据,对吗?我也在考虑避免重复代码。非常感谢。因为我是selenium的新手,所以我需要正在考虑是否有其他方法来实现此目的。@DeepuNair:如果TestGuru99LoginPage.java是您的测试,那么我还建议您考虑将登录和主页的实例化移到@BeforeTest方法,并仅调用
    code
    login.logintogru99(sUsername,sPassword)
    code
    以及Assert.assertTrue或Assert.assertFal