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)); }
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); }