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; } }
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 <object> ExecuteScript(string script, CancellationToken cancellationToken = default(CancellationToken), params object[] args) { var res = await _asyncChromeDriver.WindowCommands.ExecuteScript(script, ArgsToStringList(args)).ConfigureAwait(false); var exception = ResultValueConverter.ToWebBrowserException(res); if (exception != null) { throw exception; } return(ParseExecuteScriptReturnValue((res as JObject)?["value"])); // (res as JObject)?["value"] as JValue)?.Value; }
public async Task <JToken> FindElement(string strategy, string expr, string startNode, string notElementId, TimeSpan timeout, CancellationToken cancellationToken = default(CancellationToken)) { try { JToken res = null; var waitEnd = default(DateTime); var nowTime = DateTime.Now; while (true) { res = await _asyncChromeDriver.WindowCommands.FindElement(strategy, expr, startNode, cancellationToken).ConfigureAwait(false); if (!ResultValueConverter.ValueIsNull(res)) { if (notElementId == null) { break; } else { var elId = GetElementFromResponse(res); if (elId != notElementId) { break; } } } if (waitEnd == default(DateTime)) { var implicitWait = timeout; if (implicitWait == default(TimeSpan)) { implicitWait = await _asyncChromeDriver.Options.Timeouts.GetImplicitWait().ConfigureAwait(false); } if (implicitWait == default(TimeSpan)) { break; } waitEnd = nowTime + implicitWait; } if (DateTime.Now > waitEnd) { break; } await Task.Delay(50).ConfigureAwait(false); } if (ResultValueConverter.ValueIsNull(res)) { throw new WebBrowserException($"Element not found by {strategy} = {expr}", "no such element"); } return(res); } catch { throw; } //var res = await asyncChromeDriver.WindowCommands.FindElement(strategy, expr, startNode, cancellationToken); //if (ResultValueConverter.ValueIsNull(res)) //{ // var implicitWait = await asyncChromeDriver.Options.Timeouts.GetImplicitWait(); // if (implicitWait != default(TimeSpan)) // { // var waitEnd = DateTime.Now + implicitWait; // while (ResultValueConverter.ValueIsNull(res) && DateTime.Now < waitEnd) // { // Thread.Sleep(50); // res = await asyncChromeDriver.WindowCommands.FindElement(strategy, expr, startNode, cancellationToken = default(CancellationToken)); // } // } //} //if (ResultValueConverter.ValueIsNull(res)) throw new WebBrowserException($"Element not found by {strategy} = {expr}", "no such element"); //return res; }