Выполнение нескольких IT-блоков в цикле Protractor For для веб-тестирования - PullRequest
0 голосов
/ 18 января 2019

Нам нужно использовать цикл for после входа на веб-страницу и выполнять несколько тестов внутри блока for на странице. Мой идеальный сценарий тестирования должен быть похож на фрагмент ниже. У нас есть таблица с кнопками в каждой строке, и мы перейдем к следующей странице для этой конкретной кнопки и проверим данные. в настоящее время мы объединили все ожидания и утверждения в один ИТ-блок, но это не очень хорошее решение. Нам нужно разделить разделы тестов на разные IT-блоки.

require('..\\waitAbsent.js');
require("../node_modules/jasmine-expect/index.js");
var EC = protractor.ExpectedConditions;

describe('Student Enrollment Page Content Validation', function() {


beforeAll(function () {
    browser.driver.manage().window().maximize();
    browser.get(globalVariables.loginMain);
    globalVariables.Email_Input_box.sendKeys(globalVariables.Demo_User);
    globalVariables.Password_Input_Box.sendKeys(globalVariables.Demo_PWD);
    globalVariables.Submit_Button.click();
    browser.wait(EC.invisibilityOf(globalVariables.Submit_Button), 25000, 'submit button is not disappearing yet');
});

async function Row_Numbers() {

    const RowCount = (globalVariables.tableData_Dashboard.all(by.tagName("tr")).count()).then(function(RC){

        return RC;

    });

}

for (var i = 1; i<Row_Numbers(); i++){

    function tableData(n){
        var row_1 = globalVariables.tableData_Dashboard.all(by.tagName("tr")).get(n);

        // get cell values
        var cells = row_1.all(by.tagName("td"));

        it ('should return the data fo the first cell', function(){
            var Student_ID = cells.get(0).getText().then(function (SID) {
                console.log(SID);

                return SID;

            });

            expect(Student_ID.toEqual('Something'));
        });

        it ("should show the button in this row", async function(){

            const Button = globalVariables['Edit_Button_' + n];
            // console.log(Button)
            expect(await Button.isDisplayed());
            Button.click();
            // do some thing

        });
    }tableData(i)
}

});

Когда мы запускаем тест с использованием этого скрипта, мы получаем следующую ошибку:

E / launcher - Ошибка при ожидании синхронизации Protractor со страницей: «и angularJS тестируемость, и угловая тестируемость не определены. Это может быть либо потому, что это неугловая страница, либо потому, что ваш тест включает в себя s клиентская навигация, которая может помешать загрузке Protractor. Подробнее см. https://github.com/angular/protractor/issues/2643

Как я могу использовать цикл for для достижения нашей цели?

1 Ответ

0 голосов
/ 18 января 2019

У меня есть пара комментариев по этому поводу.

Во-первых, ваша угловая ошибка в том, что объявленная вами функция Row_number находится за пределами любого блока it и поэтому выполняется до запуска beforeAll.

Далее не нужно использовать функцию tableData, так как замена ее параметра n на счетчик i из цикла будет иметь тот же эффект.

Наконец, если ваш код должен пройти несколько страниц для выполнения этих тестов, вероятно, будет гораздо лучше использовать подход, основанный на данных, и писать отдельные файлы данных для каждого теста. Изменяются ли значения строк в этих таблицах или они будут согласованы?

Обновление: Этот подход может выглядеть примерно так, но я не проверял это.

beforeAll(function () {
    browser.driver.manage().window().maximize();
    browser.get(globalVariables.loginMain);
    globalVariables.Email_Input_box.sendKeys(globalVariables.Demo_User);
    globalVariables.Password_Input_Box.sendKeys(globalVariables.Demo_PWD);
    globalVariables.Submit_Button.click();
    browser.wait(EC.invisibilityOf(globalVariables.Submit_Button), 25000, 'submit button is not disappearing yet');
});

it('test it', async () => {
    globalVariables.tableData_Dashboard.all(by.tagName("tr")).forEach((row) => {
        var cells = row.all(by.tagName("td"));

        var Student_ID = cells.get(0).getText().then(function (SID) {
            console.log(SID);
            return SID;
        });

        expect(Student_ID.toEqual('Something'), 'should return the data fo the first cell');

        const Button = globalVariables['Edit_Button_' + n];
        // console.log(Button)
        expect(Button.isDisplayed(), 'should show the button in this row').toBe(true);
        Button.click();
        // do some thing

    });
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...