Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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;
        }