断言在页面对象中不可用? - 无法读取未定义的 属性 'ok'。

Assert not available in page object? - Cannot read property 'ok' of undefined.

我有一个小型守夜测试,它正在读取价格并检查该值是否为正数。

    browser.getText ('.price', function(result) {
       var myPrice = Number(result.value.replace('-.','').trim());
       browser.assert.ok(isPositive(myPrice), 'price is a positive number');
    });

如果我将它直接放在测试本身中,它会工作得很好,但是当我将它作为一个函数移动到我的页面对象文件中时(像这样):

checkPrice: function (){
    this.expect.element('@price').text.to.be.visible.before(1000);
    this.getText ('@price', function(result) {
       var myPrice = Number(result.value.replace('-.','').trim());
       this.assert.ok(isPositive(myPrice), 'price is a positive number');
    });
}, 

它抛出这个错误:"Cannot read property 'ok' of undefined"。我尝试使用 assert.equal 来更改我的支票,但它给出了相同的错误,即 属性 不可访问。 我在这里 () 了解到 assert 作用域可能存在一些问题,因为它是 client 的成员,但是如果我使用 client 而不是 this 它再也看不到断言了:“无法读取未定义的 属性 'assert'”.

我还读到 this 有时使用起来很棘手,但我的 javascript 编程技能有限,所以从这个角度来看,我可能会错过一些东西。

你能给我一个建议,为什么这不起作用,我该如何尝试修复它?

this进入内部函数作用域后发生变化,所以需要保存对它的引用。

checkPrice: function (){
    var _this = this;
    this.expect.element('@price').text.to.be.visible.before(1000);
    this.getText ('@price', function(result) {
       var myPrice = Number(result.value.replace('-.','').trim());
       _this.assert.ok(isPositive(myPrice), 'price is a positive number');
    });
},