web-dev-qa-db-fra.com

Comment retourner une valeur lors de l'utilisation de execute_script dans capybara?

J'ai une ligne très simple dans un test qui appelle un script d'exécution comme celui-ci:

puts page.execute_script("return somefunction();").to_i.inspect

Et en javascript j'ai une fonction comme celle-ci:

function somefunction(){
    console.log("test");
    return 999;
}

Le "test" du journal de la console se déconnecte donc il est en cours d'exécution cependant ...

En regardant les journaux lors de l'exécution du test, le execute_script renvoie 0 et non 999, donc dans rspec, je ne peux pas obtenir la valeur de retour de la fonction, comment faire pour que page.execute_script renvoie cette valeur de cette fonction?

29
MintDeparture

Le pilote Poltergeist est conçu pour retourner nil pour execute_script :

def execute_script(script)
  browser.execute(script)
  nil
end

Poltergeist ne renverra une valeur que si vous utilisez evaluate_script :

def evaluate_script(script)
  browser.evaluate(script)
end

Capybara a des méthodes correspondantes pour chacun - c'est-à-dire Session#execute_script et Session#evaluate_script . Votre code devrait fonctionner si vous passez à l'utilisation de evaluate_script (et comme le souligne @AndreyBotalov, vous devez également supprimer le return):

puts page.evaluate_script("somefunction();").to_i.inspect
41
Justin Ko