javascript - 从用于 Chrome 远程接口(interface)的 Selenium WebDriver 中提取 nodeId

标签 javascript selenium google-chrome-devtools chrome-remote-debugging

我能够在 Selenium WebDriver session 中调用 Chrome 远程接口(interface)函数(Page.captureScreenshot、Emulation.clearDeviceMetricsOverride 等)。但是我在调​​用适用于 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 问题跟踪器的问题的答案 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");
}

关于javascript - 从用于 Chrome 远程接口(interface)的 Selenium WebDriver 中提取 nodeId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47145608/

相关文章:

javascript - 如何规避第三方 https 站点的同源策略?

javascript - 为什么 Javascript 函数调用在函数名后不包含 '()'?

Python Selenium - 如何根据另一个 DIV 的文本单击 div 中的按钮

html - Network Chrome Inspector 中的 TextTracks 选项卡是什么?

javascript - 文件大小因 chrome 网络面板而异

javascript - 单击 div 时,Anchor #Tag 将整个页面向上移动

java - 使用 java 和 apache poi 读取 excel 时获取未知字符

javascript - 按类型单击 Selenium 中的元素

redux - 使用 Chrome 开发工具的控制台打印/修改 Redux 存储

javascript - Axios 方法将 item 作为 null 传递,而不是将实际值传递给我的 mongoose 路由