Как использовать переменную объекта страницы в функции транспортира .each ()?

Мне было интересно, как использовать переменную объекта страницы в функции .each().

Сценарий заключается в том, что каждый раз, когда я нажимаю ссылку «Удалить», будет отображаться сладкое подтверждение предупреждения, и я должен подтвердить это диалоговое окно, чтобы удалить данные.

Вот мой объект страницы:

'use strict';

// page object name
var Data = function()
{
    // all delete links
    this.delete_links = element.all(by.css('div[ng-click="delete(Data.id)"]'));

    // confirm button
    this.btn_confirm = element(by.css('.confirm'));

    // delete function
    this.delete = function()
    {
        // delete all links with confirmation
        this.delete_links.each(function(element, index)
        {
            // click delete link
            element.click().then(function()
            {
                browser.sleep(1000);
            });

            // click yes
            this.btn_confirm.click().then(function()
            {
                browser.sleep(1000);
            });
        });
    };
};

module.exports = Data;

person Heru Rusdianto    schedule 02.06.2015    source источник
comment
А с чем вы испытываете трудности? Делает ли функция delete то, что вы от нее ожидаете? Спасибо.   -  person alecxe    schedule 02.06.2015
comment
@alecxe Нет, пишет TypeError: невозможно прочитать свойство 'btn_confirm' неопределенного сэра.   -  person Heru Rusdianto    schedule 03.06.2015


Ответы (1)


this внутри "каждой" функции/обратного вызова не относится к самому объекту страницы. Чтобы это исправить, определите переменную и установите для нее значение this.btn_confirm:

this.delete = function()
{
    // delete all links with confirmation
    this.delete_links.each(function(element, index)
    {
        var confirmButton = this.btn_confirm;

        // click delete link
        element.click().then(function()
        {
            browser.sleep(1000);
        });

        // click yes
        confirmButton.click().then(function()
        {
            browser.sleep(1000);
        });
    });
};
person alecxe    schedule 03.06.2015