Использование переменной в функциональном тесте 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);