在 InternetExplorerDriver 中提取资源条目
Extracting resource entries in InternetExplorerDriver
我正在使用 Selenium Webdriver 并使用 IE11
。
我想从 HTML 页面访问 window 性能资源。
来自 chrome 我可以用
轻松做到这一点
IJavaScriptExecutor js = _webDriver as IJavaScriptExecutor;
ReadOnlyCollection<object> rList = ReadOnlyCollection<object>)js.ExecuteScript("return window.performance.getEntriesByType(\"resource\")");
然后一个简单的字符串对象字典转换让我得到详细信息。
但相同的代码不适用于 IE。在那里,我被迫将 js 返回的内容转换为 ReadOnlyCollection<IWebElement>
- 这显然不包含我想要的任何信息。
有谁知道我应该怎么做才能得到真实信息回来了?
好吧,我找到了某种答案
基本上我可以使用这样的字符串查询来查找数组描述并访问单个项目。
"return window.performance.getEntriesByType(\"resource\").length"
"return window.performance.getEntriesByType(\"resource\")[0].name"
不是我预期的解决方案,但它有效
编辑:我要留下我的另一个答案,因为我很笨。
这是我现在使用的。
var resourceJson = ieDriver.ExecuteScript("var resourceTimings = window.performance.getEntriesByType(\"resource\");return JSON.stringify(resourceTimings)");
var resourceTimings = JsonConvert.DeserializeObject<System.Collections.ObjectModel.ReadOnlyCollection<object>>(resourceJson.ToString());
我被困在同一条船上,这是我能做的最好的事情了:
var resNames = ieDriver.ExecuteScript("var keys = [];for(var key in window.performance.getEntriesByType(\"resource\")){keys.push(key);} return keys;");
Dictionary<string, Dictionary<string, object>> resTimings = new Dictionary<string, Dictionary<string, object>>();
foreach (string name in (System.Collections.ObjectModel.ReadOnlyCollection<object>)resNames)
{
var resource = new Dictionary<string, object>();
var resProperties = ieDriver.ExecuteScript(string.Format("var keys = [];for(var key in window.performance.getEntriesByType(\"resource\")[{0}]){{keys.push(key);}} return keys;", name));
foreach (string property in (System.Collections.ObjectModel.ReadOnlyCollection<object>)resProperties)
{
resource.Add(property, ieDriver.ExecuteScript(string.Format("return window.performance.getEntriesByType(\"resource\")[{0}].{1};", name, property)));
}
resTimings.Add(name, resource);
}
这行得通,但似乎花费的时间太长了。我敢肯定有很多优化要做。对js了解不多,不过好像卸下那里的工作可能会更快。
我正在使用 Selenium Webdriver 并使用 IE11
。
我想从 HTML 页面访问 window 性能资源。
来自 chrome 我可以用
IJavaScriptExecutor js = _webDriver as IJavaScriptExecutor;
ReadOnlyCollection<object> rList = ReadOnlyCollection<object>)js.ExecuteScript("return window.performance.getEntriesByType(\"resource\")");
然后一个简单的字符串对象字典转换让我得到详细信息。
但相同的代码不适用于 IE。在那里,我被迫将 js 返回的内容转换为 ReadOnlyCollection<IWebElement>
- 这显然不包含我想要的任何信息。
有谁知道我应该怎么做才能得到真实信息回来了?
好吧,我找到了某种答案 基本上我可以使用这样的字符串查询来查找数组描述并访问单个项目。
"return window.performance.getEntriesByType(\"resource\").length"
"return window.performance.getEntriesByType(\"resource\")[0].name"
不是我预期的解决方案,但它有效
编辑:我要留下我的另一个答案,因为我很笨。 这是我现在使用的。
var resourceJson = ieDriver.ExecuteScript("var resourceTimings = window.performance.getEntriesByType(\"resource\");return JSON.stringify(resourceTimings)");
var resourceTimings = JsonConvert.DeserializeObject<System.Collections.ObjectModel.ReadOnlyCollection<object>>(resourceJson.ToString());
我被困在同一条船上,这是我能做的最好的事情了:
var resNames = ieDriver.ExecuteScript("var keys = [];for(var key in window.performance.getEntriesByType(\"resource\")){keys.push(key);} return keys;");
Dictionary<string, Dictionary<string, object>> resTimings = new Dictionary<string, Dictionary<string, object>>();
foreach (string name in (System.Collections.ObjectModel.ReadOnlyCollection<object>)resNames)
{
var resource = new Dictionary<string, object>();
var resProperties = ieDriver.ExecuteScript(string.Format("var keys = [];for(var key in window.performance.getEntriesByType(\"resource\")[{0}]){{keys.push(key);}} return keys;", name));
foreach (string property in (System.Collections.ObjectModel.ReadOnlyCollection<object>)resProperties)
{
resource.Add(property, ieDriver.ExecuteScript(string.Format("return window.performance.getEntriesByType(\"resource\")[{0}].{1};", name, property)));
}
resTimings.Add(name, resource);
}
这行得通,但似乎花费的时间太长了。我敢肯定有很多优化要做。对js了解不多,不过好像卸下那里的工作可能会更快。