WebDriver wykonanie funkcji JavaScript

Na stronie wykonuje się co kilka sekund pewna funkcja javascript. Próbowałem uruchomić stronę za pomocą WebDrive i następnie metodą execute_script podmienić kod javascript, niestety o ile execute_script powoduje wykonoanie poszczególnym poleceń o tyle umieszczenie funkcji js w execute_script nie powoduje podmiany owej funkcji. Natomiast po wklejenie tej samej funkcji w inspektorze zostaje ona podmieniona.

driver = Selenium::WebDriver.for :chrome driver.navigate.to 'http://www.example.com' driver.execute_script("alert('test'); function foo() { alert('test2'); }")
Po wykonaniu tego kodu w przeglądarce pojawia mi się alert ze słowem ‘test’, ale funkcja foo, która wykonuje się cyklicznie, nie powoduje wyświetlenie alertu ze słowem ‘test2’, zastanawiam się czy w ogóle istnieje możliwość podmiany funkcji javascript za pomocą WebDrive ? Ewentualnie mogę przełączyć się na inną bibliotekę która to umożliwia.

wydaje mi się że tylko zdefiniowałeś funkcję (foo()) - musisz chyba ją jeszcze odpalić :

driver.execute_script("alert('test'); function foo() { alert('test2'); }; foo();")

Odpalenie funkcji spowoduje jej uruchomienie tylko raz, a nie cyklicznie. Funkcja nie wywołuje samej siebie.

window.setInterval ?

Może inaczej, na stronie jest inna funkcja która wykonuje funkcję foo() i wstrzyknięcie nowej funkcji foo() nie powoduje zastąpienia oryginalnej funkcji. Znalazłem już sposób podmiany tego:

var scriptCode = new Array(); // this is where we are going to build our new script scriptCode.push('//javascript code'); var script = document.createElement('script'); script.innerHTML = scriptCode.join('\n'); scriptCode.length = 0; document.getElementsByTagName('head')[0].appendChild(script);
rozwijązanie może nie jest idealne/ładne, ale działa.