2017-09-11 1 views
1

j'ai fonction JS personnalisé sur certains des détails de la page de performance Faire automatisation via rubis rspec-capybara Ayant code suivant:execute_script rubis pour la fonction personnalisée conduit à aucun résultat

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()") 

Je l'ai essayé avec toutes les méthodes que Ruby a fait:

execute_async_script 
execute_script 
evaluate_script 

Et il n'y a aucun résultat dans la console Mais ils sont si im faire manuellement en plus j'ai essayé de mettre alerts ou console.log fonction interne juste pour vérifier si toutes les lignes sont exécutées du tout - toutes les alertes sont affichées pendant le test

J'ai ajouté une attente pour m'assurer que la page est chargée (juste pour exclure des questions sur ce cas)

ma question est de savoir pourquoi cette fonction ne retourne pas les valeurs lorsque le test est exécuté

+0

ce qui se passe quand vous faites 'evaluate_script'? Des erreurs n'importe où? –

+0

vérifier si la sortie standard et l'erreur standard sont redirigés –

+0

"Et il n'y a pas de résultats dans la console" - Je ne vois aucun code qui écrit à la console. –

Répondre

0

L'appel ne retourne rien parce que votre script ne retourne rien.

Voici un exemple:

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

Oui, merci beaucoup. il a aidé et cela fonctionne si utilisation sans emballage dans la fonction: 'if (window.performance && window.performance.timing) { let timing = window.performance.timing; let timing_obj = {}; ... return timing_obj; } ' – z4elovek