从 Chrome 远程接口的 Selenium WebDriver 中提取 nodeId
Extracting nodeId from Selenium WebDriver for Chrome Remote Interface
我能够在 Selenium WebDriver 会话(Page.captureScreenshot、Emulation.clearDeviceMetricsOverride 等)中调用 Chrome 远程接口函数。但是我在调用适用于 DOM 元素的方法时遇到问题。问题出在 nodeId 参数上。例如,此函数 https://chromedevtools.github.io/devtools-protocol/tot/DOM/#method-setFileInputFiles 接受 nodeId 作为参数之一。我不知道如何从 SeleniumWebdriver 中提取基于 IWebElement(或 RemoteWebElement)的 nodeId。
如何使用 Selenium 或 Javascript 找到 nodeId?
有关 Chrome 远程接口的更多信息可在此处找到 https://chromedevtools.github.io/devtools-protocol/
我在 devtools-protocol issue tracker 上找到了答案 https://github.com/ChromeDevTools/devtools-protocol/issues/66
完整的解决方案可以在这里找到:
https://github.com/cezarypiatek/Tellurium/blob/master/Src/MvcPages/SeleniumUtils/ChromeRemoteInterface/ChromeRemoteInterface.cs
private long GetChromeNodeId(IWebElement inputElement)
{
driver.ExecuteScript(@"(function(fileInput){
window.__tellurium_chromerinode = fileInput;
})(arguments[0])", inputElement);
var evaluateResponse = SendCommand("Runtime.evaluate", new Dictionary<string, object>
{
["expression"] = "window.__tellurium_chromerinode"
});
driver.ExecuteScript(@"(function(fileInput){
delete window.__tellurium_chromerinode;
})()");
var remoteObjectId = evaluateResponse.GetValue<string>("result.objectId");
var rquestNodeResponse = SendCommand("DOM.requestNode", new Dictionary<string, object>
{
["objectId"] = remoteObjectId
});
return rquestNodeResponse.GetValue<long>("nodeId");
}
我能够在 Selenium WebDriver 会话(Page.captureScreenshot、Emulation.clearDeviceMetricsOverride 等)中调用 Chrome 远程接口函数。但是我在调用适用于 DOM 元素的方法时遇到问题。问题出在 nodeId 参数上。例如,此函数 https://chromedevtools.github.io/devtools-protocol/tot/DOM/#method-setFileInputFiles 接受 nodeId 作为参数之一。我不知道如何从 SeleniumWebdriver 中提取基于 IWebElement(或 RemoteWebElement)的 nodeId。
如何使用 Selenium 或 Javascript 找到 nodeId?
有关 Chrome 远程接口的更多信息可在此处找到 https://chromedevtools.github.io/devtools-protocol/
我在 devtools-protocol issue tracker 上找到了答案 https://github.com/ChromeDevTools/devtools-protocol/issues/66
完整的解决方案可以在这里找到: https://github.com/cezarypiatek/Tellurium/blob/master/Src/MvcPages/SeleniumUtils/ChromeRemoteInterface/ChromeRemoteInterface.cs
private long GetChromeNodeId(IWebElement inputElement)
{
driver.ExecuteScript(@"(function(fileInput){
window.__tellurium_chromerinode = fileInput;
})(arguments[0])", inputElement);
var evaluateResponse = SendCommand("Runtime.evaluate", new Dictionary<string, object>
{
["expression"] = "window.__tellurium_chromerinode"
});
driver.ExecuteScript(@"(function(fileInput){
delete window.__tellurium_chromerinode;
})()");
var remoteObjectId = evaluateResponse.GetValue<string>("result.objectId");
var rquestNodeResponse = SendCommand("DOM.requestNode", new Dictionary<string, object>
{
["objectId"] = remoteObjectId
});
return rquestNodeResponse.GetValue<long>("nodeId");
}