2011-09-26 62 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')             
}