Как элегантно зациклить вызовы в JavaScript / CoffeeScript? - PullRequest
1 голос
/ 26 сентября 2011

Я использую Soda для написания тестов Selenium в Node.js, и у меня возникает ситуация, когда мне приходится нажимать клавишу вниз несколько раз.

Код в настоящее время выглядит следующим образом:

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')                                                  

  ...                                                                       

Как я мог высушить это?

Просто использование такого цикла не работает с этой библиотекой:

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

Потрясающие идеи?

Я мог бы использовать async API в Soda и, например, async-lib , чтобы выручить меня, но я здесь спрашиваю не об этом. Это делает некоторые другие вещи ужасными.

Ответы [ 3 ]

4 голосов
/ 26 сентября 2011

Существует метод с именем 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

3 голосов
/ 26 сентября 2011

Вы пытались заменить переменную b в цикле?

var b = browser.chain()                                                     
for (var i = 0; i < 10; i++) {                                              
  b = b.keyDown(editor, '\\40')                                                 
}                                                                           
2 голосов
/ 26 сентября 2011

Ты рядом.Вам просто нужно изменить b в цикле, чтобы он правильно цепочек.

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