2011-09-26 61 views
1

我使用Soda在Node.js中编写Selenium测试,我有一种情况,我必须多次按下向下键。如何在JavaScript/CoffeeScript中优雅地循环链接调用?

的代码目前看起来是这样的:

browser                  
    .chain                  
    .setSpeed(200)                
    .session()                 
    .open('/')                 
    .click("id=save")               
    .focus(editor)                
    .keyDown(editor, '\\40')             
    .keyDown(editor, '\\40')             
    .keyDown(editor, '\\40')             
    .keyDown(editor, '\\40')             
    .keyDown(editor, '\\40')             
    .keyDown(editor, '\\40')             
    .keyDown(editor, '\\40')             
    .keyDown(editor, '\\40')             
    .keyDown(editor, '\\40')             
    .keyDown(editor, '\\40')             

    ...                  

我怎么可能干涸这个吗?

就利用这样的循环不使用此LIB工作:

var b = browser.chain()              
for (var i = 0; i < 10; i++) {            
    b.keyDown(editor, '\\40')             
}                   

真棒想法?

我可以使用汽水中的异步API,例如async-lib来帮助我,但这不是我在这里问的。它使一些其他的事情变得丑陋。

+0

什么是循环实际上呢?一个keydown? –

+0

尝试在循环内移动'chain',如'b.chain.keyDown' –

回答

4

有一种方法叫and在命令链的中间做复杂的事情:

browser 
    .chain 
    .setSpeed(200) 
    .session() 
    .open('/') 
    .click("id=save") 
    .focus(editor) 
    .and(function (browser) { 
    for (var i = 0; i < 10; i++) { 
     browser.keyDown(editor, '\\40') 
    } 
    }) 
    ... 

见README了解更多信息:https://github.com/learnboost/soda

+0

啊,我完全错过了!谢谢! – Epeli

+0

@Epeli你打算接受答案吗? –

3

你试过在循环中替换b变量吗?

var b = browser.chain()              
for (var i = 0; i < 10; i++) {            
    b = b.keyDown(editor, '\\40')             
}                   
2

你很近。你只需要改变循环中的b,使其正确链接。

var b = browser.chain()              
for (var i = 0; i < 10; i++) {            
    b = b.keyDown(editor, '\\40')             
}