同一类中的依赖方法仅在包含在"testng suite"中时才无序运行;运行类独立尊重依赖关系



我有一个类,它包含使用TestNG注释的依赖方法

dependsOnMethods

如果我只是将测试作为包中的TestNG测试来运行,那么测试100%都运行良好。

当我将测试包含在TestNG套件中时,方法会乱序运行。是的,我正在使用:

  <test name="Test" preserve-order="true">

在我的.xml文件中。

套件中的每个其他测试都尊重方法的顺序,并且运行时不会出现问题。是否有任何已知信息说明为什么会发生这种情况?

测试用例代码:

@Test(groups={ "Administration"})
public class RoleCrudTest extends AbstractIntegrationTest
{
protected static SeleniumActionHelper action;
    @Test
    public void inactiveRole() throws Exception
    {
        SeleniumHelper helper = new SeleniumHelper();
        action = new SeleniumActionHelper(driver);
        helper.login();
        String roleUrl = navigateToUrl("role/roles.xhtml");
        driver.get(roleUrl);
        assertEquals("Role:", findElementBySelector("span.portletButtonHeader").getText());
        WebElement roleName = findElementById("roleName");
        assertFalse(roleName.isEnabled());
        WebElement deptId = findElementById("deptid");
        assertFalse(deptId.isEnabled());
    }
    @Test(dependsOnMethods = "inactiveRole")
    public void createRole() throws Exception
    {
        WebElement addButton = findElementById("add");
        addButton.click();
        waitUntilAjaxRequestCompletes();
        WebElement roleName = findElementById("roleName");
        roleName.click();
        roleName.sendKeys("AAAAAAAA");
        WebElement deptId = findElementByXpath("(//button[@type='button'])[3]");
        deptId.click();
        WebElement dept = findElementByXpath("//div[@id='department_panel']/ul/li[2]");
        dept.click();
        WebElement checkbox = findElementByXpath("//li[@id='privileges:1']/div/span/div/div");
        checkbox.click();
        Thread.sleep(1000);
        WebElement save = findElementById("save");
        save.click();
        assertEquals("Role saved successfully", findElementBySelector("div.ui-growl-message > p").getText());
    }
    @Test(dependsOnMethods = "createRole")
    public void editUndo() throws Exception
    {
        Thread.sleep(1000);
        WebElement tableSort = findElementByXpath("//th[@id='tableSection:rolesListWrapped:j_idt85']/div/span[2]");
        tableSort.click();
        Thread.sleep(1000);
        WebElement createdRole = findElementByXpath("//tbody[@id='tableSection:rolesListWrapped_data']/tr[1]/td/div");
        createdRole.click();
        Thread.sleep(1000);
        WebElement roleName = findElementById("roleName");
        roleName.click();
        roleName.clear();
        roleName.sendKeys("edited");
        WebElement deptId = findElementByXpath("(//button[@type='button'])[3]");
        deptId.click();
        WebElement dept = findElementByXpath("//div[@id='department_panel']/ul/li[3]");
        dept.click();
        WebElement checkbox = findElementByXpath("//li[@id='privileges:1']/div/span/div/div/span");
        checkbox.click();
        WebElement checkbox2 = findElementByXpath("//li[@id='privileges:0']/div/span/div/div");
        checkbox2.click();
        Thread.sleep(1000);
        WebElement undo = findElementById("cancel");
        undo.click();
        String text = findElementById("roleName").getAttribute("value");
        String oldtext = "AAAAAAAA";
        assertTrue(text.equals(oldtext));
    }
    @Test(dependsOnMethods = "editUndo")
    public void editRole() throws Exception
    {
        Thread.sleep(1000);
        WebElement createdRole = findElementByXpath("//tbody[@id='tableSection:rolesListWrapped_data']/tr[1]/td/div");
        createdRole.click();
        Thread.sleep(1000);
        WebElement roleName = findElementById("roleName");
        roleName.click();
        roleName.clear();
        roleName.sendKeys("AAAAAAAAedited");
        WebElement deptId = findElementByXpath("(//button[@type='button'])[3]");
        deptId.click();
        WebElement dept = findElementByXpath("//div[@id='department_panel']/ul/li[3]");
        dept.click();
        WebElement checkbox = findElementByXpath("//li[@id='privileges:1']/div/span/div/div/span");
        checkbox.click();
        WebElement checkbox2 = findElementByXpath("//li[@id='privileges:0']/div/span/div/div");
        checkbox2.click();
        Thread.sleep(1000);
        WebElement save = findElementById("save");
        save.click();
        assertEquals("Role saved successfully", findElementBySelector("div.ui-growl-message > p").getText());
    }
    @Test(dependsOnMethods = "editRole")
    public void deleteRole() throws Exception
    {
        Thread.sleep(1000);
        WebElement deleteButton = findElementById("tableSection:delete");
        deleteButton.click();
        WebElement deleteConfirm = findElementById("confirmDelete:yes");
        deleteConfirm.click();
        Thread.sleep(500);
        assertEquals("Role deleted successfully", findElementBySelector("div.ui-growl-message > p").getText());
        waitUntilAjaxRequestCompletes();
    }

}

dependsOnMethods是您想要的,而不是preserve-order(实际上,建议使用dependsOnGroups而非dependsOnMethods,但两者都可以)。

如果您有一个显示问题的小测试用例,请将其发布为

最新更新