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.
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.