我有关于一些页面性能细节的自定义 JS 函数 通过 ruby-rspec-capybara 进行自动化 有下一个代码:
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()")
我已经尝试过 ruby 实际拥有的所有方法:
execute_async_script
execute_script
evaluate_script
并且控制台中没有结果
但如果我手动做的话,他们就是
另外,我尝试在函数内部设置 alerts
或 console.log
只是为了检查是否所有行都已执行 - 所有警报都在测试运行期间显示
我添加了等待以确保页面已加载(只是为了排除有关此情况的问题)
我的问题是为什么这个函数在测试运行时不返回值
最佳答案
该调用不会返回任何内容,因为您的脚本不会返回任何内容。
这是一个例子:
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
};
})
关于javascript - 自定义函数的 rubyexecute_script 导致没有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46155956/