数据提供程序依赖于未按预期执行的方法

时间:2013-07-16 09:21:21

标签: selenium-webdriver testng

我正在尝试运行用于登录和注销的测试脚本。登录和注销都是方法。我使用数据提供程序和登录方法进行数据驱动的框架,登出方法取决于登录。但是当我执行时,登录方法及其所有数据和注销只在最后执行一次。我如何一个接一个地执行login-logout以进行数据驱动的框架工作。谢谢你的帮助。

 @Test(dataProvider = "DP")
       public void login(String Usrname, String Pwd)
       {
            driver = new FirefoxDriver();
                driver.get("***********");
                driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
                driver.findElement(By.id("username")).sendKeys(Usrname);
                driver.findElement(By.id("password")).sendKeys(Pwd);
                driver.findElement(By.id("login")).click();
       }

       @Test(dependsOnMethods = { "login" })
       public void logout(String Usrname, String Pwd)
       {
           driver.findElement(By.id("logout")).click();
           driver.close();
       }

我使用XML文件:

<suite name="Suite1" verbose="1" >

<test name="Factory" group-by-instances="true">
    <classes>
      <class name="test.AllMethod">
        <methods>
           <include name="login"/>
            <include name="logout"/>
        </methods>
      </class>
    </classes>
  </test>
</suite>

执行如下:

login(1)
login(2)
login(3)
logout(1)
logout(2)
logout(3)

我如何执行它:

login(1)
logout(1)
login(2)
logout(2)
login(3)
logout(3)

2 个答案:

答案 0 :(得分:0)

请为@AfterMethod方法使用logout()注释,而不是@Test方法(相应地更改套件文件)。

注销方法并没有使用作为参数传递的凭据,顺便说一下,你可以跳过这些。

答案 1 :(得分:0)

//在注销方法之前不要使用@Test(dependsOnMethods = {“login”}),而是使用@AfterMethod

@Test(dataProvider = "DP")
   public void login(String Usrname, String Pwd)
   {
        driver = new FirefoxDriver();
            driver.get("***********");
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
            driver.findElement(By.id("username")).sendKeys(Usrname);
            driver.findElement(By.id("password")).sendKeys(Pwd);
            driver.findElement(By.id("login")).click();
   }

   @AfterMethod
   public void logout(String Usrname, String Pwd)
   {
       driver.findElement(By.id("logout")).click();
       driver.close();
   }