public SeleniumCheckSettings Region(IWebElement targetElement)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.targetElement_ = targetElement;
            return(clone);
        }
        public SeleniumCheckSettings Accessibility(IWebElement element, AccessibilityRegionType regionType)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.Accessibility_(new AccessibilityRegionByElement(element, regionType));
            return(clone);
        }
        public SeleniumCheckSettings Region(Rectangle rect)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.UpdateTargetRegion(rect);
            return(clone);
        }
        public SeleniumCheckSettings UseCookies(bool useCookies)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.useCookies_ = useCookies;
            return(clone);
        }
        public SeleniumCheckSettings Accessibility(By regionSelector, AccessibilityRegionType regionType)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.Accessibility_(new AccessibilityRegionBySelector(regionSelector, regionType));
            return(clone);
        }
        public SeleniumCheckSettings Floating(IWebElement element, int maxUpOffset, int maxDownOffset, int maxLeftOffset, int maxRightOffset)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.Floating_(new FloatingRegionByElement(element, maxUpOffset, maxDownOffset, maxLeftOffset, maxRightOffset));
            return(clone);
        }
        public SeleniumCheckSettings Floating(IWebElement element, int maxOffset = 0)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.Floating_(new FloatingRegionByElement(element, maxOffset, maxOffset, maxOffset, maxOffset));
            return(clone);
        }
        public SeleniumCheckSettings Floating(By regionSelector, int maxOffset = 0)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.Floating_(new FloatingRegionBySelector(regionSelector, maxOffset, maxOffset, maxOffset, maxOffset));
            return(clone);
        }
        public SeleniumCheckSettings Floating(By regionSelector, int maxUpOffset, int maxDownOffset, int maxLeftOffset, int maxRightOffset)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.Floating_(new FloatingRegionBySelector(regionSelector, maxUpOffset, maxDownOffset, maxLeftOffset, maxRightOffset));
            return(clone);
        }
        public SeleniumCheckSettings Region(By by)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.targetSelector_ = by;
            return(clone);
        }
        public SeleniumCheckSettings LayoutBreakpointsEnabled(bool shouldSet)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.layoutBreakpointsEnabled_ = shouldSet;
            clone.layoutBreakpoints_.Clear();
            return(clone);
        }
        public SeleniumCheckSettings Accessibility(By regionSelector, AccessibilityRegionType regionType)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.Accessibility_(new AccessibilityRegionBySelector(regionSelector, regionType));
            clone.fluentCode_.Append($".{nameof(Accessibility)}({regionSelector},{nameof(AccessibilityRegionType)}.{regionType})");
            return(clone);
        }
        public SeleniumCheckSettings Floating(IWebElement element, int maxOffset = 0)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.Floating_(new FloatingRegionByElement(element, maxOffset, maxOffset, maxOffset, maxOffset));
            clone.fluentCode_.Append($".{nameof(Floating)}({element},{maxOffset})");
            return(clone);
        }
        public SeleniumCheckSettings Accessibility(IWebElement element, AccessibilityRegionType regionType)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.Accessibility_(new AccessibilityRegionByElement(element, regionType));
            clone.fluentCode_.Append($".{nameof(Accessibility)}({element},{nameof(AccessibilityRegionType)}.{regionType})");
            return(clone);
        }
        public SeleniumCheckSettings Floating(By regionSelector, int maxOffset = 0)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.Floating_(new FloatingRegionBySelector(regionSelector, maxOffset, maxOffset, maxOffset, maxOffset));
            clone.fluentCode_.Append($".{nameof(Floating)}({regionSelector},{maxOffset})");
            return(clone);
        }
        public SeleniumCheckSettings Region(By by)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.targetSelector_ = by;
            clone.fluentCode_.Append($".Region({by})");
            return(clone);
        }
        public SeleniumCheckSettings Region(IWebElement targetElement)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.targetElement_ = targetElement;
            clone.fluentCode_.Append($".Region({targetElement})");
            return(clone);
        }
        public SeleniumCheckSettings Region(Rectangle rect)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.UpdateTargetRegion(rect);
            clone.fluentCode_.Append($".Region(new Rectangle({rect.X},{rect.Y},{rect.Width},{rect.Height}))");
            return(clone);
        }
        public SeleniumCheckSettings Accessibility(AccessibilityRegionType regionType, params IWebElement[] elementsToIgnore)
        {
            SeleniumCheckSettings clone = Clone_();

            foreach (IWebElement element in elementsToIgnore)
            {
                clone.Accessibility_(new AccessibilityRegionByElement(element, regionType));
            }
            return(clone);
        }
        public SeleniumCheckSettings Frame(IWebElement frameReference)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.frameChain_.Add(new FrameLocator()
            {
                FrameReference = frameReference
            });
            return(clone);
        }
        public SeleniumCheckSettings Frame(int index)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.frameChain_.Add(new FrameLocator()
            {
                FrameIndex = index
            });
            return(clone);
        }
        /// <summary>
        /// Adds one or more content regions.
        /// </summary>
        /// <param name="elements">An enumerbale of elements, each representing a content region.</param>
        /// <returns>An updated clone of this settings object.</returns>
        public SeleniumCheckSettings Content(IEnumerable <IWebElement> elements)
        {
            SeleniumCheckSettings clone = Clone_();

            foreach (IWebElement elem in elements)
            {
                clone.Content_(new SimpleRegionByElement(elem));
            }
            return(clone);
        }
        public SeleniumCheckSettings Floating(int maxUpOffset, int maxDownOffset, int maxLeftOffset, int maxRightOffset, params IWebElement[] elementsToIgnore)
        {
            SeleniumCheckSettings clone = Clone_();

            foreach (IWebElement element in elementsToIgnore)
            {
                clone.Floating_(new FloatingRegionByElement(element, maxUpOffset, maxDownOffset, maxLeftOffset, maxRightOffset));
            }
            return(clone);
        }
        public SeleniumCheckSettings Frame(By by)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.frameChain_.Add(new FrameLocator()
            {
                FrameSelector = by
            });
            return(clone);
        }
        /// <summary>
        /// Adds one or more content regions.
        /// </summary>
        /// <param name="selectors">An enumerbale of selectors representing content regions.</param>
        /// <returns>An updated clone of this settings object.</returns>
        public SeleniumCheckSettings Content(IEnumerable <By> selectors)
        {
            SeleniumCheckSettings clone = Clone_();

            foreach (By sel in selectors)
            {
                clone.Content_(new SimpleRegionBySelector(sel));
            }
            return(clone);
        }
        public SeleniumCheckSettings Frame(string frameNameOrId)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.frameChain_.Add(new FrameLocator()
            {
                FrameNameOrId = frameNameOrId
            });
            return(clone);
        }
        public SeleniumCheckSettings Frame(int index)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.frameChain_.Add(new FrameLocator()
            {
                FrameIndex = index
            });
            clone.fluentCode_.Append($".Frame({index})");
            return(clone);
        }
        public SeleniumCheckSettings Frame(By by)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.frameChain_.Add(new FrameLocator()
            {
                FrameSelector = by
            });
            clone.fluentCode_.Append($".Frame({by})");
            return(clone);
        }
        public SeleniumCheckSettings Frame(string frameNameOrId)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.frameChain_.Add(new FrameLocator()
            {
                FrameNameOrId = frameNameOrId
            });
            clone.fluentCode_.Append($".Frame(\"{frameNameOrId}\")");
            return(clone);
        }
        /// <summary>
        /// Adds one or more content regions.
        /// </summary>
        /// <param name="element">An element representing a content region.</param>
        /// <param name="elements">One or more elements, each representing a content region.</param>
        /// <returns>An updated clone of this settings object.</returns>
        public SeleniumCheckSettings Content(IWebElement element, params IWebElement[] elements)
        {
            SeleniumCheckSettings clone = Clone_();

            clone.Content_(new SimpleRegionByElement(element));
            foreach (IWebElement elem in elements)
            {
                clone.Content_(new SimpleRegionByElement(elem));
            }
            return(clone);
        }