mercredi 2 mars 2016

Efficient way of GUI testing in java

I need to do write testing code for GUI. I am using Jsp,java, JavaScript. I am running the testing GUI in browser, and doing some action on its, for eg. search . And than matching that source code with the expected code. This is taking really much time. And I have huge number of files. It takes around 2 hours to test every time, which is very inconvenient. Is there any efficient way Or any Improvement/ Suggestion. I attached one of my testing class.

import static org.testng.AssertJUnit.assertTrue;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.openqa.selenium.By;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import tests.common.datatransfer.DataBundle;
import tests.common.util.AppUrl;
import tests.common.util.Const;
import tests.test.pageobjects.AdminSearchPage;
import tests.test.pageobjects.Browser;
import tests.test.pageobjects.BrowserPool;

public class AdminSearchPageUiTest extends BaseUiTestCase {
    public static final int ADMIN_SEARCH_INSTRUCTOR_TABLE_NUM_COLUMNS = 5;
    public static final int ADMIN_SEARCH_STUDENT_TABLE_NUM_COLUMNS = 6;

    private static Browser browser;
    private static AdminSearchPage searchPage;
    private static DataBundle testData;

    @BeforeClass
    public static void classSetup() throws Exception {
        printTestClassHeader();
        testData = loadDataBundle("/InstructorSearchPageUiTest.json");
        removeAndRestoreTestDataOnServer(testData);
        putDocuments(testData);
        browser = BrowserPool.getBrowser();
    }

    @Test 
    public void allTests() throws Exception{    
        testContent();
        testSearch();        
    }

    private void testContent() {

        ______TS("content: default search page");

        String instructorId = testData.accounts.get("instructor1OfCourse1").googleId;
        searchPage = getAdminSearchPage(instructorId);

        assertTrue(isPageTitleCorrect());
        assertTrue(isSearchPanelPresent());
    }

    private void testSearch() {

        ______TS("search for nothing");

        String searchContent = "";
        searchPage.inputSearchContent(searchContent);
        searchPage.clickSearchButton();

        assertTrue(isPageTitleCorrect());
        assertTrue(isSearchPanelPresent());
        assertTrue(isEmptyKeyErrorMessageShown());

        ______TS("search for student1");

        searchPage.clearSearchBox();
        searchContent = "student1";
        searchPage.inputSearchContent(searchContent);
        searchPage.clickSearchButton();

        assertTrue(isSearchPanelPresent());
        assertTrue(isSearchDataDisplayCorrect());
    }

    private AdminSearchPage getAdminSearchPage(String instructorId) {
        AppUrl commentsPageUrl = createUrl(Const.ActionURIs.ADMIN_SEARCH_PAGE);

        return loginAdminToPage(browser, commentsPageUrl, AdminSearchPage.class);
    }

    private boolean isPageTitleCorrect() {
        return searchPage.getPageTitle().equals("Admin Search");
    }

    private boolean isSearchPanelPresent() {
        return searchPage.isElementPresent(By.id("filterQuery"))
            && searchPage.isElementPresent(By.id("searchButton"));
    }

    private boolean isEmptyKeyErrorMessageShown() {
        String statusMessage = searchPage.getStatus();

        return statusMessage.equals("Search key cannot be empty");
    }

    /**
     * This method only checks if the search data tables are displayed correctly
     * i.e, table headers are correct, and appropriate message is displayed if no
     * search data is present.
     * It does not test for the table content
     */
    private boolean isSearchDataDisplayCorrect() {
        if (searchPage.isElementPresent(By.className("table"))) {
            int numSearchDataTables = browser.driver.findElements(By.className("table")).size();
            for (int i = 0 ; i < numSearchDataTables ; i++) {
                if (!isSearchTableHeaderCorrect(i)) {
                    return false;
                }
            }
            return true;
        } else {     
            String statusMessage = searchPage.getStatus();
            return statusMessage.equals("No result found, please try again");
        }

    }

    private boolean isSearchTableHeaderCorrect(int tableNum) {
        List<String> expectedSearchTableHeaders;
        List<String> actualSessionTableHeaders;       

        int numColumns = searchPage.getNumberOfColumnsFromDataTable(tableNum);

        switch (searchPage.getDataTableId(tableNum)) {
        // Instructor table
        case "search_table_instructor":
            if (numColumns != ADMIN_SEARCH_INSTRUCTOR_TABLE_NUM_COLUMNS) {
                return false;
            }
            expectedSearchTableHeaders = Arrays.asList("Course",
                                                       "Name",
                                                       "Google ID",
                                                       "Institute",
                                                       "Options");
            actualSessionTableHeaders = new ArrayList<String>();

            for (int i = 0 ; i < numColumns ; i++) {
                actualSessionTableHeaders.add(searchPage.getHeaderValueFromDataTable(tableNum, 0, i));
            }

            break;

        // Student table
        case "search_table":
            if (numColumns != ADMIN_SEARCH_STUDENT_TABLE_NUM_COLUMNS) {
                return false;
            }
            expectedSearchTableHeaders = Arrays.asList("Institute",
                                                       "Course[Section](Team)",
                                                       "Name",
                                                       "Google ID[Details]",
                                                       "Comments",
                                                       "Options");
            actualSessionTableHeaders = new ArrayList<String>();
            for (int i = 0 ; i < numColumns ; i++) {
                actualSessionTableHeaders.add(searchPage.getHeaderValueFromDataTable(tableNum, 0, i));
            }

            break;

        default:
            return false;
        }

        return actualSessionTableHeaders.equals(expectedSearchTableHeaders);
    }


    @AfterClass
    public static void classTearDown() throws Exception {
        BrowserPool.release(browser);
    }
}

Aucun commentaire:

Enregistrer un commentaire