Тест с DataProvider повторяется несколько раз с другим параметром DP для каждого раза - PullRequest
0 голосов
/ 06 февраля 2019

У меня 20 или более таблиц.Количество столов может быть разным.Для определения количества таблиц я использую функциональность driver.findElements (By.xpath (...)). Size ().

Для одной таблицы я создал метод DataProvider, который возвращает объект:

@DataProvider
    public Object[][] tableValues() throws Exception {
    .........

    int c = 0; // here I use HashMap<String, String> object 
    //filled with entry.getValue = column label, entry.getKey() = cell value of column

    Object obj[][] = new Object[tableMap.size()][4];
    print("========== DataProvider object generating...");
    print("========== Size of tableMap: "+tableMap.size());
    for (Map.Entry entry: tableMap.entrySet()) {
        obj[c][0] = fileName;
        obj[c][1] = entry.getValue();
        obj[c][2] = entry.getKey();
        obj[c][3] = false;
        c++;
    }
    obj[tableMap.size()-1][3]=true;
    return obj;
}

В этом случае у меня есть fileName = "имя файла 1" для первой таблицы.

Я использую этот объект, чтобы утверждать, что каждое значение таблицы может быть найдено в базе данных с помощью функции веб-поиска.Для поиска я использую только значение entry.getKey, но использую fileName и entry.getValue в отчетах по экстентам, чтобы показать, где находится значение.

Я жестко запрограммировал fileName здесь, проверяя значения только для таблицы с этим fileName.

Я хочу повторить и DataProvider, и метод Test "количество таблиц" раз, используя каждый раз следующий номер таблицы, начиная с 01. Я мог бы сказать это по-другому: например, у меня есть 20 таблиц,Я должен использовать 20 DataProviders с 20 различными fileNames, и я должен запустить @Test (dataProvider = "tableValues") 20 раз также с разными именами таблиц.Я не мог получить 20 наборов таблиц в одном большом DataProvider.Я мог бы это сделать, но я не должен этого делать, потому что значения таблиц могут измениться через 10-20 минут, и это может изменить результаты теста.Я получаю ограниченное количество строк и быстро проверяю их.Затем я иду в другую таблицу, выбирая значения, утверждая значения и т. Д.

@Test(dataProvider = "tableValues")
public void ValuesAsserting(String fileName, String columnName, String cellValue, boolean flag) throws Exception {
    if (cellValue != null) {                        //Steps:
        inputField(cellValue, "searchFieldXpath");  //1
        buttonClick("searchButtonXpath");           //2
        waitLoaderDisplayed();                      //3
        waitLoaderHidden();                         //4
        print("Verifying "+fileName+": "+columnName+": "+cellValue);
        logger = extent.createTest("Verifying of "+fileName+" value: "+"\n"+columnName+": "+cellValue);
        assertValueIsInResults(cellValue,"searchResultsXpath"); //5
        // asserts file's generation time before and after testing
        scanTimeAssert(flag);                       //After tests
    }
}

1 Ответ

0 голосов
/ 07 февраля 2019

Я нашел решение в документации TestNG.Аннотация @Factory помогает решить эту проблему.

// It is my main class Factory provides with file's number required for xpath to open it and go further:
public class AllTablesTest extends BaseTest {
    // It is the main thing I added to get it worked within factory:
    private int fNumber;
    public AllTablesTest(int fileNumber) {
        this.fNumber = fileNumber;
    }
    ........
}

// WebTestFactory class I get from TestNG documentation and changed it to get desirable number of files:
public class WebTestFactory extends BaseTest{
    int numberOfFiles;

    @Factory
    public Object[] createInstances() throws Exception {
        getDriver("Chrome");
        getUrl("adminUrl");
        login(getValue("adminEmail"),getValue("adminPass"));
        numberOfFiles = getNumberOfFiles();
        Object[] result = new Object[numberOfFiles];
        for (int i=0; i<numberOfFiles; i++) {
            result[i]=new AllTablesTest(i+1);
        }
        return result;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...