Использование переменной в функциональном тесте Intern

Мне нужно использовать переменную, значение которой определяется на основе пикселя стиля CSS. Тест найти значение левого пикселя, а затем выбрать конкретную ячейку. Но когда я запускаю этот тест, значение всегда равно 0 вместо того, что на самом деле должно быть.

 'Test' : function() { 
            var left = 0;
            var remote = this.remote;
            return remote
            .setFindTimeout(5000)

            .findByXpath("//div[@class = 'grid']//div[@class = 'gridCell' and position() = 1]/div[3]")
              .getAttribute("style") 
              .then( function(width) {
                  left = parseInt(width.substring(width.indexOf("left")+6,width.indexOf("width")-4));
              }).end() 
            .f_selectCell("", 0, left)               
        },

1 ответ

Хотя вызовы в цепочке команд будут выполняться последовательно, само выражение цепочки анализируется, и аргументы разрешаются до начала выполнения. Так что в случае

return remote
    .findByXpath('...')
    .getAttribute('style')
    .then(function (width) {
        left = parseInt(width);
    })
    .f_selectCell('', 0, left);

left аргумент f_selectCell оценивается до того, как цепочка начинает выполняться. когда left переназначается в then Перезвоните, f_selectCell не будет знать об этом, потому что он уже оценил left быть 0.

Вместо этого вам нужно позвонить f_selectCell метод в then Обратный звонок или передать его object что свойства могут быть назначены.

return remote
    // ...
    .then(function (width) {
        left = parseInt(width);
    })
    .then(function () {
        // I'm not entirely sure where f_selectCell is coming from...
        return f_selectCell('', 0, left);
    });

или же

// Put all args to selectCell in this
var selectData = {};

return remote
    // ...
    .then(function (width) {
        selectData.left = parseInt(width);
    })
    // selectCell now takes an object with all args
    // The object is never reassigned during execution. 
    .f_selectCell(selectData);
Другие вопросы по тегам