1

因此,我试图找出一种在使用 DalekJS 运行测试时从浏览器获取值的方法。据我所知,目前不可能。我什至看过破解 Dalek 代码,但由于除了安装和运行之外我对 CommonJS 和 NodeJS 知之甚少,我想我可能会先四处询问。

我想做的是这样的:

// Non-working example
module.exports = {
  'My Test': function(test) {
    var foo;

    test
    .open('http://localhost/mysite')
    .execute(function(){
      foo = document.getElementById('bar');
    })
    .type('#myField', foo)
    .done();
  }
}

现在我知道为什么这段代码不起作用了:因为该execute()函数是在浏览器窗口的上下文中执行的(就像我在控制台中键入它一样)。

我要问的问题是有没有办法可以检索要在测试中使用的值?


上下文信息:我的用例是我正在测试一个提交表单并向用户提供代码的 E2E 场景。然后需要在另一个页面上输入此代码。我可能会为测试目的设置模拟值,但这不是一个真实的场景。

提前致谢!

4

2 回答 2

0

根据记录的.log.message函数示例,您可以执行以下操作:

module.exports = {
  'My Test': function(test) {
    test
      .open('http://localhost/mysite')
      .execute(function(){
        var foo = document.getElementById('bar').value;
        this.data('foo', foo);
      })
      .type('#myField', test.data('foo'))
      .done();
  }
}
于 2014-07-21T11:01:38.490 回答
0

是的,

这是一个我们还没有实现的用例,但是在我们没有找到合适的解决方案之前,您可以使用一种解决方法:

module.exports = {
  'My Test': function(test) {
    test
      .open('http://localhost/mysite')
      .execute(function(){
        var foo = document.getElementById('bar').innerText;
        document.getElementById('myField').setAttribute('value', foo);
      })
      .done();
  }
};

此方法存在一些问题,以这种方式将值添加到字段时,不会触发任何事件处理程序keyup,例如 等。keydown如果您的代码不依赖它们,那么您就可以开始了。否则,您将不得不等待几周直到新版本发布,这将为此类情况提供更好的解决方案。

希望有帮助。

干杯塞巴斯蒂安

于 2014-03-04T09:16:23.680 回答