c# - 如何在 Selenium+C# 中为单个登录页面测试用例创建多个函数
问题描述
例如:- 我有一个带有用户名和密码的登录页面。以及我脑海中的 10 个测试用例,那么我如何使用这 10 个测试用例的函数编写脚本。
解决方案
您应该选择数据驱动测试。
为什么 :
我们必须在许多数据集上运行相同的测试。而且,为每个数据集值创建不同的测试既耗时又低效。
数据驱动测试通过将数据保留在功能测试之外并在需要扩展自动化测试时加载它们来克服这个问题。
TestNG的使用:
- TestNG 是一个框架,使 Selenium 中的数据驱动自动化测试成为可能。
- 它具有一些额外的关键特性,例如参数化、并行测试执行等
这是数据驱动测试的完整实现。
我为此使用了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#。
如需更多参考,您可以查看TestNG文档: TestNG 文档
您可以使用 CSV 文件、Excel 文件和数据库进行数据驱动测试,但是我提供的解决方案不使用其中任何一种。
推荐阅读
- ubuntu - 我需要在下面的块中增加 sda5 任何想法如何以安全的方式做到这一点
- ruby-on-rails - 使用 docker 开发 rails 应用程序时运行 webpack-dev-server 的最佳方式
- flutter - Flutter 从文件中缓存图像
- spring - 运行spring批处理时nginx 413实体太大
- azure - API 之间的 Azure 慢速通信
- javascript - 使用 Typescript 导入文件
- python - 如何将最大值和持续时间提取到新的 df/list 中
- angular - 自定义库中的 Angular 11 泳道/ngx-datatable 未在某些项目中添加 ngx-datatable 类
- c - 改进/修复素数分解功能
- java - 无法使字段最终瞬态 java.lang.Class java.util.EnumSet.elementType 可访问:模块 java.base 不会“打开 java.util”以未命名