22

Mam bardzo prostą linię w teście, który wywołuje wykonać skrypt tak:Jak zwrócić wartość podczas używania execute_script w kapibarze?

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

aw javascript Mam funkcję tak:

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

„testu” z dziennika konsoli zostaje wylogowany, więc działa ...

Patrząc na logi podczas uruchamiania testu, execute_script zwraca 0, nie 999, więc w rspec nie mogę uzyskać wartości zwracanej z funkcji, jak to zrobić Dokonuję zwrotu strony.execute_script ta wartość z tej funkcji?

+0

Który kierowca używasz? Wygląda na to, że działa z co najmniej Selenium-Webdriver. –

+0

To jest Poltergeist. – Smickie

Odpowiedz

33

poltergeist Sterownik przeznaczony jest do powrotu zero dla execute_script:

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

Poltergeist będzie tylko zwrócić wartość w przypadku korzystania z evaluate_script:

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

Kapibara ma odpowiednie metody dla każdego - tzn Session#execute_script i Session#evaluate_script. Twój kod powinien działać, jeśli przełącznik do korzystania evaluate_script (i jak @AndreyBotalov zwraca uwagę, trzeba także usunąć return):

puts page.evaluate_script("somefunction();").to_i.inspect 
+1

Należy zauważyć, że ta odpowiedź nie zadziała w przypadku Selenium, ponieważ Capybara wstawiłaby 'return'. –

+0

@AndreyBotalov, poprawiłem kod, aby usunąć 'return' przy użyciu' evaluate_script'. W tym 'return' rzuci wyjątek zarówno dla Selenium, jak i Poltergeista. –