Selenium TestNG-当软断言在第一次迭代中失败时(第二次应该通过),第二次迭代显示相同的断言失败

时间:2018-08-13 21:52:58

标签: selenium selenium-webdriver testng

我必须使用数据提供程序在具有不同客户端的页面上验证整数值。我正在使用softassert,因此执行不会停止。但是,当一个软件断言在第一次迭代中(有意地)失败时,随后的迭代会突然失败(应通过),并抛出与第一次迭代中完全相同的断言错误。但如果经过一次迭代,第二步就可以继续进行。问题可能在哪里?

@BeforeMethod
public void beforeMethod(Method method) {
    System.setProperty("webdriver.chrome.driver","C:\\Users\\a0136300\\Downloads\\chromedriver_win32\\chromedriver.exe");

    driver = new ChromeDriver();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    config = new Configreader();
    driver.manage().deleteAllCookies();
}

@DataProvider(name = "TestMSSData")
public Object [][] getData(){
    Object [][] data=new Object[2][6];

    data[0][0]="url1";
    data[0][1]="client1";
    data[0][2]="Retail Eligibles : 2018";
    data[0][3]="E1";
    data[0][4]="Maria_Fake";
    data[0][5]=7937;
    data[1][0]="url2";
    data[1][1]="client2";
    data[1][2]="ACTIVE- FAC : 2018";
    data[1][3]="E2";
    data[1][4]="Tad_Fake";
    data[1][5]=4761;
    return data; 
}

@Test(dataProvider = "TestMSSData")
public void Manager_Self_Service(String url, String client, String eliggrp, String empnumber, String firstname, Integer SSN) throws Exception {

    driver.get(url);

    try {
        String headertex = driver.findElement(By.xpath("/html/body/div[2]/div[1]/div[1]/h3")).getText();
        Assert.assertEquals(headertex, "Log On ");}
    catch (NoSuchElementException e){ 
        throw new AssertionError("Error in loading URL", e); 
    }

    driver.manage().window().maximize();

    RIMethods obj3 =new RIMethods(driver, config);
    obj3.Login();

    //Verify last 4 digits of SSN

    String sn = driver.findElement(By.name("eeSsn3")).getAttribute("value");
    int socialsecurity = Integer.parseInt(sn);

    s_assert.assertEquals(socialsecurity, SSN, "SSN last four digits did not match");

    //verify the header for Future benefits 
    if(driver.findElement(By.xpath("/html/body/div[4]/div[2]/div[1]/div[1]")).getText().contains("Future Benefits Summary"))
    System.out.println("Future Benefits summary header is correct");
    else
    System.out.println("header is incorrect");

    driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

    s_assert.assertAll();
}

@AfterMethod
public void cleanUp(){
    driver.quit();
}

1 个答案:

答案 0 :(得分:0)

啊,要花一个整天都在努力,解决方案太简单了。

为使其工作,我在Test方法内创建了softassert对象,而不是在类级别进行定义,不确定该如何影响,但现在可以正常工作了。