예제 #1
0
        public static SeleneElement JsClick(
            this SeleneElement element,
            int centerXOffset = 0,
            int centerYOffset = 0
            )
        {
            element.Wait.For(new _Lambda <SeleneElement, object>(
                                 $"JsClick(centerXOffset: {centerXOffset}, centerYOffset: {centerYOffset})",
                                 self =>
            {
                // TODO: should we bother here explicitely by being not overlapped like we do in JsSetValue below?
                element.ExecuteScript(@"
                        var centerXOffset = args[0];
                        var centerYOffset = args[1];

                        var rect = element.getBoundingClientRect();
                        element.dispatchEvent(new MouseEvent('click', {
                            'view': window,
                            'bubbles': true,
                            'cancelable': true,
                            'clientX': rect.left + rect.width/2 + centerXOffset,
                            'clientY': rect.top + rect.height/2 + centerYOffset 
                        }));
                        ",
                                      centerXOffset,
                                      centerYOffset
                                      );
            }
                                 ));
            return(element);
        }
 public static SeleneElement JsScrollIntoView(this SeleneElement element)
 {
     element.ExecuteScript(
         "element.scrollIntoView({ behavior: 'smooth', block: 'center'})"
     );
     return element;
 }
예제 #3
0
 public static SeleneElement JsScrollIntoView(this SeleneElement element)
 {
     // TODO: probably we have to wait here for something... for what?:)
     element.ExecuteScript(
         "element.scrollIntoView({ behavior: 'smooth', block: 'center'})"
         );
     return(element);
 }
        public void GoogleSearchText()
        {
            string url = "http://google.com";

            Selene.GoToUrl(url);
            SeleneElement searchInput = Selene.S("#lst-ib");

            searchInput.SetValue("QA");
        }
        public void JsScrollIntoView()
        {
            Given.OpenedPageWithBody("<input style='margin-top:100cm;' type='text' value='ku ku'/>");
            SeleneElement element = S("input");

            new SeleneDriver(Selene.GetWebDriver()).Should(Have.No.JSReturnedTrue(ELEMENT_IN_VIEEW, element.ActualWebElement));

            element.JsScrollIntoView();

            new SeleneDriver(Selene.GetWebDriver()).Should(Have.JSReturnedTrue(ELEMENT_IN_VIEEW, element.ActualWebElement));
        }
예제 #6
0
            // todo: should we move Js* extensions to a separate namespace
            //       to use them like: `using Nselene.Support.Extensions.Js;`
            public static SeleneElement JsClick(this SeleneElement element, int centerXOffset = 0, int centerYOffset = 0)
            {
                element.ExecuteScript(@"
                    var centerXOffset = args[0];
                    var centerYOffset = args[1];

                    var rect = element.getBoundingClientRect();
                    element.dispatchEvent(new MouseEvent('click', {
                        'view': window,
                        'bubbles': true,
                        'cancelable': true,
                        'clientX': rect.left + rect.width/2 + centerXOffset,
                        'clientY': rect.top + rect.height/2 + centerYOffset 
                    }));
                    ",
                                      centerXOffset,
                                      centerYOffset);
                return(element);
            }
예제 #7
0
 public static SeleneElement AssertToNot(this SeleneElement selement, Condition <SeleneElement> condition)
 {
     return(selement.ShouldNot(condition));
 }
예제 #8
0
 public override bool Apply(SeleneElement entity)
 {
     this.actual = entity.ActualWebElement.Text;
     return(this.actual.Equals(this.expected));
 }
예제 #9
0
        public static SeleneElement JsSetValue(this SeleneElement element, string value)
        {
            // TODO: should we call here and above the Should(Be.Visible) ?
            // element.Should(Be.Visible);
            if (element.Config.WaitForNoOverlapFoundByJs ?? false)
            {
                element.Wait.For(new _Lambda <SeleneElement, object>(
                                     $"JsSetValue({value})",
                                     self =>
                {
                    element.ExecuteScript(@"

                            // REQUIRE is not overlapped

                            var centerXOffset = 0;
                            var centerYOffset = 0;

                            var isVisible = !!( 
                                element.offsetWidth 
                                || element.offsetHeight 
                                || element.getClientRects().length 
                            ) && window.getComputedStyle(element).visibility !== 'hidden'

                            if (!isVisible) {
                                throw 'element is not visible'
                            }

                            var rect = element.getBoundingClientRect();
                            var x = rect.left + rect.width/2 + centerXOffset;
                            var y = rect.top + rect.height/2 + centerYOffset;

                            // TODO: now we return [element, null] in case of elementFromPoint returns null
                            //       (kind of – if we don't know what to do, let's at least not block the execution...)
                            //       rethink this... and handle the iframe case
                            //       read more in https://developer.mozilla.org/en-US/docs/Web/API/Document/elementFromPoint

                            var elementByXnY = document.elementFromPoint(x,y);
                            if (elementByXnY == null) { // TODO: do we even need it here?
                                throw 'could not find element by its coordinates'
                            }

                            var isNotOverlapped = element.isSameNode(elementByXnY);
                            if (!isNotOverlapped) {
                                throw 'element is overlapped by: ' + elementByXnY.getAttribute('outerHTML')
                            }

                            // THEN set value

                            var value = args[0];

                            var maxlength = element.getAttribute('maxlength') === null
                                ? -1
                                : parseInt(element.getAttribute('maxlength'));
                            element.value = maxlength === -1
                                ? value
                                : value.length <= maxlength
                                    ? value
                                    : value.substring(0, maxlength);
                            ",
                                          value
                                          );
                }
                                     ));
            }
            else
            {
                element.Wait.For(new _Lambda <SeleneElement, object>(
                                     $"JsSetValue({value})",
                                     self =>
                {
                    element.ExecuteScript(@"
                            var value = args[0];

                            var maxlength = element.getAttribute('maxlength') === null
                                ? -1
                                : parseInt(element.getAttribute('maxlength'));
                            element.value = maxlength === -1
                                ? value
                                : value.length <= maxlength
                                    ? value
                                    : value.substring(0, maxlength);
                            ",
                                          value
                                          );
                }
                                     ));
            }

            return(element);
        }
예제 #10
0
 public static SeleneElement JsScrollIntoView(this SeleneElement element)
 {
     return(SeleneElementJsExtentions.JsScrollIntoView(element));
 }
예제 #11
0
 public static SeleneCollection SS(this SeleneElement selement, By locator)
 {
     return(selement.FindAll(locator));
 }
예제 #12
0
파일: Tasks.cs 프로젝트: stanislasdp/talks
 public Tasks(IWebDriver driver) : base(driver)
 {
     list           = I.FindAll("#todo-list>li");
     clearCompleted = I.Find("#clear-completed");
 }
예제 #13
0
 public static SeleneElement AssertTo(this SeleneElement element, Condition <SeleneElement> condition)
 {
     return(element.Should(condition));
 }
예제 #14
0
파일: Tasks.cs 프로젝트: stanislasdp/talks
 public Tasks(IWebDriver driver) : base(driver)
 {
     list           = Elements("#todo-list>li");
     clearCompleted = Element("#clear-completed");
 }
예제 #15
0
 public static SeleneElement S(this SeleneElement selement, By locator)
 {
     return(selement.Find(locator));
 }
예제 #16
0
 public static SeleneElement S(this SeleneElement selement, string cssSelector)
 {
     return(selement.Find(cssSelector));
 }
예제 #17
0
 public Task(SeleneElement element)
 {
     this.element = element;
 }
예제 #18
0
 public static SeleneCollection SS(this SeleneElement selement, string cssSelector)
 {
     return(selement.FindAll(cssSelector));
 }
예제 #19
0
 public static SeleneElement JsClick(this SeleneElement element, int centerXOffset = 0, int centerYOffset = 0)
 {
     return(SeleneElementJsExtentions.JsClick(element, centerXOffset, centerYOffset));
 }