首页 > 解决方案 > 如何在 Selenium+C# 中为单个登录页面测试用例创建多个函数

问题描述

例如:- 我有一个带有用户名和密码的登录页面。以及我脑海中的 10 个测试用例,那么我如何使用这 10 个测试用例的函数编写脚本。

标签: c#asp.netseleniumselenium-webdriverselenium-chromedriver

解决方案


您应该选择数据驱动测试。

为什么 :

我们必须在许多数据集上运行相同的测试。而且,为每个数据集值创建不同的测试既耗时又低效。

数据驱动测试通过将数据保留在功能测试之外并在需要扩展自动化测试时加载它们来克服这个问题。

TestNG的使用:

  1. TestNG 是一个框架,使 Selenium 中的数据驱动自动化测试成为可能。
  2. 它具有一些额外的关键特性,例如参数化、并行测试执行等

这是数据驱动测试的完整实现

我为此使用了gmail带有 5 组测试数据):

public class Sumit{

    WebDriver driver;
    WebDriverWait wait;

    @BeforeMethod
    public void setUpClass(){
        System.setProperty("webdriver.chrome.driver", "F:\\Automation\\chromedriver.exe");
        driver = new ChromeDriver();
        wait = new WebDriverWait(driver,30); 
        driver.manage().window().maximize();
        driver.get("https://www.google.com/");
    }

    @Test(dataProvider="testdata")
    public void testLogin(String userName,String password) throws Exception {
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[text()='Sign in']")));
        driver.findElement(By.xpath("//a[text()='Sign in']")).click();
        driver.findElement(By.xpath("//input[@aria-label='Email or phone']")).sendKeys(userName);
        wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//span[text()='Next']/ancestor::div[@id='identifierNext']")));
        driver.findElement(By.xpath("//span[text()='Next']/ancestor::div[@id='identifierNext']")).click();
        driver.findElement(By.xpath("//input[@aria-label='Enter your password']")).sendKeys(password);
        Thread.sleep(2000);
        driver.findElement(By.xpath("//span[text()='Next']/ancestor::div[@id='passwordNext']")).click();
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(text(),'Wrong password. Try again or click Forgot password to reset it.')]")));
        String errorText = driver.findElement(By.xpath("//div[contains(text(),'Wrong password. Try again or click Forgot password to reset it.')]")).getText();
        System.out.println(errorText);
    }

    @DataProvider(name = "testdata")
    public Object[][] gmailData() {
     return new Object[][] {
       { "abc123@gmail.com", "yourpassowrd"},
       { "abc1234@gmail.com", "yourpassowrd"},
       {"abc12345@gmail.com","yourpassowrd"},
       {"abc12346@gmail.com","yourpassowrd"},
       {"abc12347@gmail.com","yourpassowrd"},
     };
    }


    @AfterMethod
    public void tearDown() throws Exception {
        Thread.sleep(3000);
        driver.close();   
      } 
}

PS:1.我不擅长C#,这就是我用Java编写代码的原因,同样你可以映射到C#。

  1. 如需更多参考,您可以查看TestNG文档: TestNG 文档

  2. 您可以使用 CSV 文件、Excel 文件和数据库进行数据驱动测试,但是我提供的解决方案不使用其中任何一种。


推荐阅读