代码体:
package testSteps;
import java.io.IOException;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import pageObjects.loginPage;
import utilities.XLUtils;
public class prc extends baseClass{
@Test(dataProvider="LoginData")
public void loginTestDDT(String uname, String pswd) throws InterruptedException {
loginPage lp = new loginPage(driver);
lp.enterUsername(uname);
lp.enterPassword(pswd);
lp.clickSignIn();
try {
lp.IsOpenChangeLogDisplayed();
lp.closePopUp();
lp.clickProfileIcon();
Thread.sleep(2000);
lp.clickSignOut();
driver.switchTo().defaultContent();
System.out.println("Login Successfully");
} finally
{
String actualMsg = driver.findElement(By.xpath("//div[@class='message']")).getText();
System.out.println("actual Msg :"+actualMsg);
String errorMsg= "Invalid password";
if(actualMsg.equals(errorMsg)) {
System.out.println("Test Case Passed");
}else{
System.out.println("Test Case Failed");
}
}
}
@DataProvider(name="LoginData")
String [][] getData() throws IOException{
String path=System.getProperty("user.dir")+"/src/test/java/testData/LoginData.xlsx";
int rownum=XLUtils.getRowCount(path, "Sheet1");
int colcount=XLUtils.getCellCount(path,"Sheet1",1);
String logindata[][]=new String[rownum][colcount];
for(int i=1;i<=rownum;i++)
{
for(int j=0;j<colcount;j++)
{
logindata[i-1][j]=XLUtils.getCellData(path,"Sheet1", i,j);
}
}
return logindata;
}
}
我使用这个代码登录流测试。尝试块代码体将执行积极的测试用例,最后块代码体是消极的登录测试用例。这段代码工作正常,并且正在执行所有可能的阳性和阴性测试用例。
问题:我想验证正反用例是否按照预期结果执行Pass。并且还想用Toaster消息输出验证阴性测试用例。我想从这个测试的结果,所有6个测试运行不同的凭据按照预期的结果成功执行。第一次运行:使用有效的凭据通过带有无效凭据的Run:想要验证toaster消息是否给出了我们所期望的相同的消息,因此通过了全面测试PSS,通过6次测试。
**Console Window**
popUp is closed successfully
Login Successfully
actual Msg :Invalid password
Test Case Passed
actual Msg :Email not registered
Test Case Failed
actual Msg :Invalid password
Test Case Passed
actual Msg :Fields cannot be left blank !
Test Case Failed
actual Msg :Email not registered
Test Case Failed
===============================================
TestPlan
Total tests run: 6, Passes: 0, Failures: 6, Skips: 0
===============================================
工具使用:Maven Project, Eclipse, Selenium webDriver, TestNG, Java
当断言失败时,测试将失败。
断言两个对象相等。如果不是,那么使用给定消息
抛出错误。 String actualMsg = driver.findElement(By.xpath("//div[@class='message']")).getText();
Assert.assertEquals("Test Case Failed","Invalid password", actualMsg);
您应该在您的测试数据中添加额外的字段,就像这个例子,例如,errorMessage
您的测试数据可能看起来像:
userName, password, errorMessage
validuser1,validpwd,
validuser2,validpwd,
validuser1,invalidpwd, Invalid password
invaliduser1,validpwd, Invalid user or password
,validpwd, Fields cannot be left blank!
在您的测试用例中,您可以检查是否存在错误消息,然后它应该显示错误消息,否则登录成功。
@Test(dataProvider="LoginData")
public void loginTestDDT(String username, String password, String errorMessage) throws InterruptedException {
loginPage lp = new loginPage(driver);
lp.enterUsername(uname);
lp.enterPassword(pswd);
lp.clickSignIn();
if("".equalsIgnoreCase(errorMessage){
lp.IsOpenChangeLogDisplayed();
lp.closePopUp();
lp.clickProfileIcon();
Thread.sleep(2000);
lp.clickSignOut();
driver.switchTo().defaultContent();
System.out.println("Login Successfully");
} else {
String actualMsg = driver.findElement(By.xpath("//div[@class='message']")).getText();
System.out.println("actual Msg :"+actualMsg);
Assert.equals(actualMsg,errorMessage);
}
}
您还可以利用selenium的开源框架。下面是使用QAF
的示例@QAFDataProvider(dataFile = "/src/test/java/testData/LoginData.xls")
@Test(dataProvider="LoginData")
public void loginTestDDT(Map<String, Object> testData) throws InterruptedException {
LoginPage loginPage = new LoginPage();
loginPage.doLogin(testData.get("userName").toString(), testData.get("password").toString());
String errorMessage = testData.get("errorMessage").toString();
if(StringUtils.isBlank(errorMessage){
//validate login successful
}else{
loginPage.getErrorEle().verifyVisible();
loginPage.getErrorEle().verifyText(errorMessage);
}
}