使用DataProviders登录3次,但只能登录一次

时间:2018-06-12 12:00:17

标签: selenium selenium-webdriver testng testng-dataprovider

我正在学习硒的TestNG。我想将三个不同的用户名和密码传递给@Test,这是登录方案。场景是:

  • 转到登录页面
  • 点击用户名输入字段并输入用户名
  • 单击密码输入字段并输入密码
  • 点击登录按钮
  • 点击退出按钮
  • 点击警报上的“确定”。

第一次测试正在通过。其他两个因UnhandledAlertException而失败。

package testNG;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class testData {

    WebDriver driver;






    @Test(dataProvider="data")
    public void login(String userName, String password) {
        driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.get("http://demo.guru99.com/V1/index.php");

        WebElement userID = driver.findElement(By.xpath("//input[@name='uid']"));
        WebDriverWait wait = new WebDriverWait(driver, 20); 
        wait.until(ExpectedConditions.elementToBeClickable(userID));
        userID.sendKeys(userName);

        driver.findElement(By.xpath("//input[@name='password']")).sendKeys(password);

        driver.findElement(By.xpath("//input[@name='btnLogin']")).click();

        driver.findElement(By.xpath("//a[@href='Logout.php']")).click();

        driver.switchTo().alert().accept();
        driver.quit();
    }




    @DataProvider(name="data")
    public Object[][] getUserData(){
        return new Object[][] {
            {"mngr137366", "jUgyjAn"},
            {"mngr137370", "uvetahA"},
            {"mngr137371", "utYmEqY"},
        };
                }
    }

更新: 通过处理警报和删除硬编码的用户名,代码现在正常工作。  但浏览器正在打开三次以进行三次登录。  我希望它打开一次并执行三次登录。  为此,我添加了以下代码:

@BeforeClass
public void setUp() {
    driver = new FirefoxDriver();
    driver.manage().window().maximize();
    driver.get("http://demo.guru99.com/V1/index.php");
}

并从login()函数中删除相同的内容。现在第一次登录才成功。剩下的另外两个登录。

总代码:

public class testData {

//public static void main(String[] args) {
    // TODO Auto-generated method stub
WebDriver driver;


@BeforeClass
public void setUp() {
    driver = new FirefoxDriver();
    driver.manage().window().maximize();
    driver.get("http://demo.guru99.com/V1/index.php");
}



    @Test(dataProvider="data")
    public void login(String userName, String password) {

        WebElement userID = driver.findElement(By.xpath("//input[@name='uid']"));
        WebDriverWait wait = new WebDriverWait(driver, 20); 
        wait.until(ExpectedConditions.elementToBeClickable(userID));
        userID.sendKeys(userName);

        driver.findElement(By.xpath("//input[@name='password']")).sendKeys(password);

        driver.findElement(By.xpath("//input[@name='btnLogin']")).click();

        driver.findElement(By.xpath("//a[@href='Logout.php']")).click();

        WebDriverWait waitAlert = new WebDriverWait(driver, 20);
        wait.until(ExpectedConditions.alertIsPresent());
        driver.switchTo().alert().accept();

        WebDriverWait wait1 = new WebDriverWait(driver, 20);
        wait1.until(ExpectedConditions.elementToBeClickable(userID));

    }




    @DataProvider(name="data")
    public Object[][] getUserData(){
        return new Object[][] {
            {"mngr137366", "jUgyjAn"},
            {"mngr137370", "uvetahA"},
            {"mngr137371", "utYmEqY"},
        };
                }
        }

2 个答案:

答案 0 :(得分:1)

试试这个,

WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.alertIsPresent()); 
driver.switchTo().alert().accept(); 

它会等到它找不到警报。

答案 1 :(得分:1)

看起来,你已经在登录测试方法中对用户名进行了硬编码。对于两个输入的其余部分,测试失败了(有效登录身份验证错误导致无效的用户ID到密码映射)

在将用户名分配给Userid元​​素字段后,所有测试都已通过。

修改后的登录代码:

@Test(dataProvider="data")
    public void login(String userName, String password) {
        driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.get("http://demo.guru99.com/V1/index.php");

        WebElement userID = driver.findElement(By.xpath("//input[@name='uid']"));
        WebDriverWait wait = new WebDriverWait(driver, 20); 
        wait.until(ExpectedConditions.elementToBeClickable(userID));
        userID.sendKeys(userName);

        driver.findElement(By.xpath("//input[@name='password']")).sendKeys(password);

        driver.findElement(By.xpath("//input[@name='btnLogin']")).click();

        driver.findElement(By.xpath("//a[@href='Logout.php']")).click();

        driver.switchTo().alert().accept();
        driver.quit();
    }