public async Task SwitchToFrame(int frameIndex, CancellationToken cancellationToken = default(CancellationToken)) { var script = "function(xpath) {" + " return document.evaluate(xpath, document, null, " + " XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;" + "}"; var xpath = "(/html/body//iframe|/html/frameset//frame)"; xpath += $"[{(frameIndex + 1).ToString()}]"; var args = new List <string> { xpath }; //$"\"{xpath}\"" }; try { var frame = await _asyncChromeDriver.WebView.GetFrameByFunction(_asyncChromeDriver.Session.GetCurrentFrameId(), script, args, cancellationToken).ConfigureAwait(false); var argsJson = Newtonsoft.Json.JsonConvert.SerializeObject(args); var res = await _asyncChromeDriver.WebView.CallFunction(script, argsJson, _asyncChromeDriver.Session.GetCurrentFrameId(), true, false, cancellationToken).ConfigureAwait(false); var elementId = ResultValueConverter.ToElementId(res?.Result?.Value, _asyncChromeDriver.Session.GetElementKey()); var chromeDriverId = Util.GenerateId(); var kSetFrameIdentifier = "function(frame, id) {" + " frame.setAttribute('cd_frame_id_', id);" + "}"; argsJson = $"{_asyncChromeDriver.Session.GetElementJsonString(elementId)}, \"{chromeDriverId}\""; var res2 = await _asyncChromeDriver.WebView.CallFunction(kSetFrameIdentifier, argsJson, _asyncChromeDriver.Session.GetCurrentFrameId(), true, false, cancellationToken).ConfigureAwait(false); _asyncChromeDriver.Session.SwitchToSubFrame(frame, chromeDriverId); } catch { throw; } }
public async Task SwitchToFrameByElement(string elementId, CancellationToken cancellationToken = default(CancellationToken)) { var isDisplayed = await _asyncChromeDriver.ElementUtils.IsElementDisplayed(elementId, cancellationToken).ConfigureAwait(false); var script = "function(elem) { return elem; }"; var args = new List <string> { $"{{\"{_asyncChromeDriver.Session.GetElementKey()}\":\"{elementId}\"}}" }; try { var frame = await _asyncChromeDriver.WebView.GetFrameByFunction(_asyncChromeDriver.Session.GetCurrentFrameId(), script, args, cancellationToken).ConfigureAwait(false); var argsJson = Newtonsoft.Json.JsonConvert.SerializeObject(args); var res = await _asyncChromeDriver.WebView.CallFunction(script, argsJson, _asyncChromeDriver.Session.GetCurrentFrameId(), true, false, cancellationToken).ConfigureAwait(false); var elementId2 = ResultValueConverter.ToElementId(res?.Result?.Value, _asyncChromeDriver.Session.GetElementKey()); var chromeDriverId = Util.GenerateId(); var kSetFrameIdentifier = "function(frame, id) {" + " frame.setAttribute('cd_frame_id_', id);" + "}"; argsJson = $"{_asyncChromeDriver.Session.GetElementJsonString(elementId2)}, \"{chromeDriverId}\""; var res2 = await _asyncChromeDriver.WebView.CallFunction(kSetFrameIdentifier, argsJson, _asyncChromeDriver.Session.GetCurrentFrameId(), true, false, cancellationToken).ConfigureAwait(false); _asyncChromeDriver.Session.SwitchToSubFrame(frame, chromeDriverId); } catch { throw; } }