【问题标题】:Extracting nodeId from Selenium WebDriver for Chrome Remote Interface从 Selenium WebDriver 中为 Chrome 远程接口提取 nodeId
【发布时间】:2017-11-09 06:42:31
【问题描述】:

我能够在 Selenium WebDriver 会话中调用 Chrome 远程接口功能(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/

【问题讨论】:

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


    【解决方案1】:

    我在这里找到了关于 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");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      相关资源
      最近更新 更多