2017-09-11 2 views
1

ich eigene JS-Funktion über einige Seitenleistung Details Doing Automatisierung über rubin rspec-Capybara Mit folgendem Code habe:Rubin execute_script für benutzerdefinierte Funktion führt zu keinen Ergebnissen

visit page 
    execute_async_script("function getPagePerformance(){if (window.performance && window.performance.timing) { 
    let timing = window.performance.timing; 
    let timing_obj = {}; 
    /*timing*/ 
    timing_obj.pageLoadingTime = timing.loadEventEnd - timing.navigationStart; 
    timing_obj.dnsHandshake = timing.domainLookupEnd - timing.domainLookupStart; 
    timing_obj.tcpConnect = timing.connectEnd - timing.connectStart; 
    timing_obj.timeToReachServer = timing.responseStart - timing.requestStart; 
    timing_obj.serverResponseTime = timing.responseEnd - timing.responseStart; 
    timing_obj.totalNetworkLatency = timing.responseEnd - timing.fetchStart; 
    timing_obj.domInteractive = performance.timing.domInteractive - performance.timing.navigationStart;return timing_obj;}} 
getPagePerformance()") 

Ich habe versucht, es mit Alle Methoden, die Rubin hat tatsächlich:

execute_async_script 
execute_script 
evaluate_script 

Und es gibt keine Ergebnisse in der Konsole Aber sie sind, wenn im manuell in zusätzlichen tun habe ich versuchteinstellen 10 oder console.log innerhalb Funktion nur um zu überprüfen, ob alle Linien überhaupt ausgeführt werden - alle Warnungen werden während des Testlaufs angezeigt

Ich habe hinzugefügt warten, um sicherzustellen, dass diese Seite geladen ist (nur um Fragen zu diesem Fall auszuschließen)

meine Frage ist, warum diese Funktion Wert nicht zurück, wenn Test

+0

, was passiert, wenn Sie 'evaluate_script' tun? Irgendwelche Fehler irgendwo? –

+0

Überprüfen Sie, ob die Standardausgabe und Standardfehler umgeleitet werden –

+0

"Und es gibt keine Ergebnisse in der Konsole" - Ich sehe keinen Code, der auf die Konsole schreibt. –

Antwort

0

Der Anruf kehrt nicht alles laufen wird, weil das Skript nicht alles zurück.

Hier ist ein Beispiel:

timing = execute_script(%{ 
    var t = window.performance.timing; 
    return { 
    pageLoadingTime: t.loadEventEnd - t.navigationStart, 
    dnsHandshake: t.domainLookupEnd - t.domainLookupStart, 
    tcpConnect: t.connectEnd - t.connectStart, 
    timeToReachServer: t.responseStart - t.requestStart, 
    serverResponseTime: t.responseEnd - t.responseStart, 
    totalNetworkLatency: t.responseEnd - t.fetchStart, 
    domInteractive: t.domInteractive - t.navigationStart 
    }; 
}) 
+0

Ja, vielen Dank. es half und es funktioniert, wenn ohne Funktion verwenden: 'if (window.performance && window.performance.timing) { lassen Sie Timing = window.performance.timing; Lassen Sie timing_obj = {}; ... Rückgabe timing_obj; } ' – z4elovek

Verwandte Themen