web-dev-qa-db-ja.com

カピバラでexecute_scriptを使用するときに値を返す方法は?

次のように実行スクリプトを呼び出すテストに本当に簡単な行があります。

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

そしてJavaScriptでは私はこのような関数を持っています:

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

コンソールログの「テスト」がログアウトされているため、実行されています...

テストの実行時にログを確認すると、execute_scriptは999ではなく0を返します。そのため、rspecで関数からの戻り値を取得できません。page.execute_scriptでその関数からその値を返すにはどうすればよいですか?

29
MintDeparture

Poltergeistドライバーは execute_script に対してnilを返すように設計されています:

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

evaluate_script を使用した場合にのみPoltergeistが値を返します。

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

カピバラにはそれぞれに対応するメソッドがあります。つまり、 Session#execute_script および Session#evaluate_script です。 evaluate_scriptを使用するように切り替えると、コードは機能するはずです(@AndreyBotalovが指摘しているように、returnも削除する必要があります)。

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