一点点新手到protracor但我试图实现的基本上是一个检查(从另一个函数)执行一个动作然后执行相同的检查(从早期的相同功能)。
我已经尝试过以下但不幸的是得到Failed: first is not defined
checkCanvasWidth: {
value: function () {
return element(by.css("div[class='canvasWrapper'] > canvas")).getAttribute("width").then(function(width) {
return width;
});
}
},
zoomIn: {
value: function () {
this.checkCanvasWidth().then(function (width) {
var first = width;
console.log("before:" + width);
});
//performs a click
this.clickZoomIn();
this.checkCanvasWidth().then(function (width) {
var second = width;
console.log("after:" + width);
});
expect(first).toBeGreaterThan(second);
}
}
任何帮助都会受到大力赞赏!
答案 0 :(得分:0)
在this.checkCanvasWidth()之外定义第一个和第二个。函数创建范围,因此只有与checkCanvasWidth一起使用的函数才能分别访问第一个和第二个。您必须在这些函数上方的范围内定义它们,以便expect函数也可以看到这些变量。
zoomIn: {
value: function () {
var first,
second;
this.checkCanvasWidth().then(function (width) {
first = width;
console.log("before:" + width);
});
//performs a click
this.clickZoomIn();
this.checkCanvasWidth().then(function (width) {
second = width;
console.log("after:" + width);
});
expect(first).toBeGreaterThan(second);
}
}
PS:如果checkCanvasWidth()
返回一个承诺,你将不得不重写整个函数,因为你想在第一次和第二次设置之后进行expect()
调用。
承诺版本:
zoomIn: {
value: function () {
var first,
second;
this.checkCanvasWidth().then(function (width) {
first = width;
console.log("before:" + width);
if (first && second) {
expect(first).toBeGreaterThan(second);
}
});
//performs a click
this.clickZoomIn();
this.checkCanvasWidth().then(function (width) {
second = width;
if (first && second) {
expect(first).toBeGreaterThan(second);
}
});
}
}
答案 1 :(得分:0)
您需要为该函数提供变量knife vault show VAULT
和first
。
Javascript具有功能范围,因此您定义second
和first
的方式在函数外部无法访问。
因此,当你编写如下代码时,变量second只能被匿名函数访问。
second
因此,您可以在外部声明变量this.checkCanvasWidth().then(function (width) {
var second = width;
console.log("after:" + width);
});
和first
,以便可以访问它们,然后在then处理程序中设置值以设置值。
second