Выполнение нескольких IT-блоков внутри цикла транспортира For для веб-тестирования

Чтобы изменить URL-адрес после сообщения формы, вы должны использовать res.redirect() для перенаправления браузера на новый URL-адрес. Затем браузер запросит новый URL-адрес, и вам понадобится маршрут для этого нового URL-адреса, чтобы вернуть желаемое содержимое страницы.

router.post('/', (req, res) => {
    // other code here to process form data
    newUser.save(..., function(err) {
        if (err) {
            console.log(err);
            res.sendStatus(500);
        } else {
            // build new URL here
            res.redirect(newURL);
        }
    });
}

Если вы хотите отобразить имя пользователя на странице к которому вы перенаправляетесь, вы должны использовать шаблон EJS, в котором есть место в нем для имени пользователя, и вы получите имя пользователя из любого места, куда вы поместите его в URL-адрес, и отправьте его в res.render() для шаблона, чтобы EJS вставьте имя пользователя в нужное место.

Если вы делаете какой-то логин, вы можете захотеть сделать весь процесс по-разному. Возможно, вам захочется создать объект сеанса пользователя (возможно, с express-session) на сервере и сохранить имя пользователя там, чтобы в любое время вы хотите отобразить страницу, имя пользователя можно извлечь из объекта сеанса на стороне сервера, а не помещать это в URL. Это, вероятно, немного более надежным.

1
задан nhrcpt 18 January 2019 в 18:32
поделиться

1 ответ

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

Во-первых, ваша угловая ошибка в том, что объявленная вами функция 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

    });
})
0
ответ дан DublinDev 18 January 2019 в 18:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: