因此,我试图找出一种在使用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场景,其中提交了一个表单并向用户提供了一个代码。然后需要在另一页上输入此代码。我可能会为测试目的设置模拟值,但那不是真实的情况。
提前致谢!
答案 0 :(得分: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
等事件处理程序。
如果您的代码不依赖它们,那么您很高兴。
否则,你必须等待几个星期,直到新版本出来,这将为这种情况提供更好的解决方案。
希望有所帮助。
干杯 塞巴斯蒂安
答案 1 :(得分: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();
}
}