Esempio n. 1
0
        public static Exception ToSeleniumException(WebBrowserException webDriverException)
        {
            switch (webDriverException.Error)
            {
            case "stale element reference": return(new StaleElementReferenceException(webDriverException.Message));

            case "invalid element state": return(new InvalidElementStateException(webDriverException.Message));

            case "No frame element found with name or id":
            case "no such frame":
                return(new OpenQA.Selenium.NoSuchFrameException(webDriverException.Message));

            case "no such element":
                return(new OpenQA.Selenium.NoSuchElementException(webDriverException.Message));

            case "invalid selector":
                return(new OpenQA.Selenium.InvalidSelectorException(webDriverException.Message));

            case "script timeout":
                return(new OpenQA.Selenium.WebDriverTimeoutException(webDriverException.Message));

            case "invalid operation":
                return(new InvalidOperationException(webDriverException.Message));

            case "invalid argument":
                return(new ElementNotVisibleException(webDriverException.Message));
            }
            return(new ArgumentOutOfRangeException(nameof(webDriverException), webDriverException.Error));
        }
Esempio n. 2
0
        public async Task SwitchToFrame(string frameName, string element = null, bool doFocus = true, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (frameName == null)
            {
                if (element == null)
                {
                    await asyncFirefoxDriver.CheckConnected(cancellationToken).ConfigureAwait(false);

                    if (asyncFirefoxDriver.ClientMarionette == null)
                    {
                        throw new Exception("error: no clientMarionette");
                    }
                    var comm1 = new SwitchToFrameCommand(frameName, element, doFocus);
                    await asyncFirefoxDriver.ClientMarionette.SendRequestAsync(comm1, cancellationToken).ConfigureAwait(false);

                    if (comm1.Error != null)
                    {
                        throw new WebBrowserException(comm1.Error);
                    }
                }
                else
                {
                    await asyncFirefoxDriver.CheckConnected(cancellationToken).ConfigureAwait(false);

                    if (asyncFirefoxDriver.ClientMarionette == null)
                    {
                        throw new Exception("error: no clientMarionette");
                    }
                    var comm1 = new SwitchToFrameCommand(frameName, element, doFocus);
                    await asyncFirefoxDriver.ClientMarionette.SendRequestAsync(comm1, cancellationToken).ConfigureAwait(false);

                    if (comm1.Error != null)
                    {
                        throw new WebBrowserException(comm1.Error);
                    }
                }
            }
            else
            {
                string name = /*frameName; //*/ Regex.Replace(frameName, @"(['""\\#.:;,!?+<>=~*^$|%&@`{}\-/\[\]\(\)])", @"\$1");
                var    json = await asyncFirefoxDriver.Elements.FindElements("css selector", "frame[name='" + name + "'],iframe[name='" + name + "']").ConfigureAwait(false);

                var frameElements = FirefoxDriverElements.GetElementsFromResponse(json);
                if (frameElements.Count == 0)
                {
                    json = await asyncFirefoxDriver.Elements.FindElements("css selector", "frame#" + name + ",iframe#" + name).ConfigureAwait(false);

                    frameElements = FirefoxDriverElements.GetElementsFromResponse(json);
                    if (frameElements.Count == 0)
                    {
                        var e = new WebBrowserException("No frame element found with name or id " + frameName, "no such frame");
                        //e.Error = "No frame element found with name or id";
                        throw e; // NoSuchFrameException("No frame element found with name or id " + frameName);
                    }
                }

                await SwitchToFrame(null, frameElements[0], doFocus, cancellationToken).ConfigureAwait(false);
            }
        }
        internal static Exception ToWebBrowserException(JToken json)
        {
            if (json is JArray)
            {
                return(null);
            }
            var status = (json as JObject)?["status"]?.ToString();

            if (status == "0")
            {
                return(null);
            }
            var value = (json as JObject)?["value"]?.ToString();
            var res   = new WebBrowserException(value)
            {
                Json = json
            };

            if (value == null)
            {
            }
            else if (status == "10" && value == "element is not attached to the page document")
            {
                res.Error = "stale element reference";
            }
            else if (status == "13" && value.EndsWith("is not defined"))
            {
                res.Error = "invalid operation";
            }
            else if (status == "32")
            {
                res.Error = "invalid selector";
            }
            else if (status == "17")
            {
                return(new InvalidOperationException(value));
            }
            else
            {
                throw new NotImplementedException(nameof(ToWebBrowserException) + ": " + value);
            }
            return(res);
        }