/// <summary>
        /// Gets the search filter instance.
        /// </summary>
        /// <param name="localName">Name of the local.</param>
        /// <returns></returns>
        private static SearchFilter GetSearchFilterInstance(string localName)
        {
            SearchFilter searchFilter;

            switch (localName)
            {
            case XmlElementNames.Exists:
                searchFilter = new Exists();
                break;

            case XmlElementNames.Contains:
                searchFilter = new ContainsSubstring();
                break;

            case XmlElementNames.Excludes:
                searchFilter = new ExcludesBitmask();
                break;

            case XmlElementNames.Not:
                searchFilter = new Not();
                break;

            case XmlElementNames.And:
                searchFilter = new SearchFilterCollection(LogicalOperator.And);
                break;

            case XmlElementNames.Or:
                searchFilter = new SearchFilterCollection(LogicalOperator.Or);
                break;

            case XmlElementNames.IsEqualTo:
                searchFilter = new IsEqualTo();
                break;

            case XmlElementNames.IsNotEqualTo:
                searchFilter = new IsNotEqualTo();
                break;

            case XmlElementNames.IsGreaterThan:
                searchFilter = new IsGreaterThan();
                break;

            case XmlElementNames.IsGreaterThanOrEqualTo:
                searchFilter = new IsGreaterThanOrEqualTo();
                break;

            case XmlElementNames.IsLessThan:
                searchFilter = new IsLessThan();
                break;

            case XmlElementNames.IsLessThanOrEqualTo:
                searchFilter = new IsLessThanOrEqualTo();
                break;

            default:
                searchFilter = null;
                break;
            }
            return(searchFilter);
        }
        public void ThenItIsPossibleToEnterAWithLabel(string inputType, string expectedLabel)
        {
            IWebLocator inputFieldLocator;
            IWebLocator labelLocator;

            switch (inputType.ToUpper())
            {
            case "URL":
                inputFieldLocator = SubmissionPage.UrlInputField;
                labelLocator      = SubmissionPage.UrlLabel;
                break;

            case "TYPE":
                inputFieldLocator = SubmissionPage.TypeSelect;
                labelLocator      = SubmissionPage.TypeLabel;
                break;

            case "EMAIL":
                inputFieldLocator = SubmissionPage.EmailInputField;
                labelLocator      = SubmissionPage.EmailLabel;
                break;

            case "DESCRIPTION":
                inputFieldLocator = SubmissionPage.DescriptionInputField;
                labelLocator      = SubmissionPage.DescriptionLabel;
                break;

            default:
                throw new NotImplementedException();
            }

            _actor.AttemptsTo(Wait.Until(Appearance.Of(inputFieldLocator), IsEqualTo.True()));
            _actor.AskingFor(Text.Of(labelLocator)).Should().Be(expectedLabel);
        }
Esempio n. 3
0
        /// <summary>
        /// Gets the list of the Web element's CSS classes.
        /// </summary>
        /// <param name="actor">The Screenplay Actor.</param>
        /// <param name="driver">The WebDriver.</param>
        /// <returns></returns>
        public override string[] RequestAs(IActor actor, IWebDriver driver)
        {
            actor.WaitsUntil(Existence.Of(Locator), IsEqualTo.True());
            string classes = driver.FindElement(Locator.Query).GetAttribute("class");

            return(classes == null?Array.Empty <string>() : classes.Split());
        }
Esempio n. 4
0
        /// <summary>
        /// Waits for an file input element to appear and uploads a file to it.
        /// Internally calls Wait.
        /// </summary>
        /// <param name="actor">The Screenplay Actor.</param>
        /// <param name="driver">The WebDriver.</param>
        public override void PerformAs(IActor actor, IWebDriver driver)
        {
            actor.AttemptsTo(Wait.Until(Existence.Of(Locator), IsEqualTo.True()));
            var element = driver.FindElement(Locator.Query);

            element.SendKeys(FilePath);
        }
Esempio n. 5
0
 public void TestDuckDuckGoWebSearch()
 {
     Actor.AttemptsTo(Navigate.ToUrl(SearchPage.Url));
     Actor.AskingFor(ValueAttribute.Of(SearchPage.SearchInput)).Should().BeEmpty();
     Actor.AttemptsTo(SearchDuckDuckGo.For("panda"));
     Actor.WaitsUntil(Appearance.Of(ResultPage.ResultLinks), IsEqualTo.True());
 }
Esempio n. 6
0
        /// <summary>
        /// Gets a web element's JavaScript textContent value.
        /// </summary>
        /// <param name="actor">The actor.</param>
        /// <param name="driver">The WebDriver.</param>
        /// <returns></returns>
        public override TValue RequestAs(IActor actor, IWebDriver driver)
        {
            object[] newArgs = Args;

            // If a locator is given, get the element and make it the first argument
            if (Locator != null)
            {
                actor.WaitsUntil(Existence.Of(Locator), IsEqualTo.True());
                var e = driver.FindElement(Locator.Query);

                IList <object> tempList = Args.ToList();
                tempList.Insert(0, e);
                newArgs = tempList.ToArray();
            }

            // Log the script
            actor.Logger.Info("JavaScript code to execute:");
            actor.Logger.Info(Script);

            // Log the arguments
            if (newArgs != null && newArgs.Length > 0)
            {
                actor.Logger.Info("JavaScript code arguments:");
                foreach (var a in newArgs)
                {
                    actor.Logger.Info(a.ToString());
                }
            }

            // Execute the script
            object response = ((IJavaScriptExecutor)driver).ExecuteScript(Script, newArgs);

            // Return the type-casted result
            return((TValue)response);
        }
Esempio n. 7
0
        /// <summary>
        /// Gets the list of the Web element's CSS classes.
        /// </summary>
        /// <param name="actor">The actor.</param>
        /// <param name="driver">The WebDriver.</param>
        /// <returns></returns>
        public override string[] RequestAs(IActor actor, IWebDriver driver)
        {
            actor.AttemptsTo(Wait.Until(Existence.Of(Locator), IsEqualTo.True()));
            string classes = driver.FindElement(Locator.Query).GetAttribute("class");

            return(classes.Split());
        }
Esempio n. 8
0
        /// <summary>
        /// Gets the Web element's text.
        /// </summary>
        /// <param name="actor">The actor.</param>
        /// <param name="driver">The WebDriver.</param>
        /// <returns></returns>
        public override IEnumerable <string> RequestAs(IActor actor, IWebDriver driver)
        {
            actor.AttemptsTo(Wait.Until(Existence.Of(Locator), IsEqualTo.True()));
            var elements = driver.FindElements(Locator.Query);
            var strings  = from e in elements select e.Text;

            // ToList() will avoid lazy evaluation
            return(strings.ToList());
        }
Esempio n. 9
0
        /// <summary>
        /// Finds all Web elements on the page matching the provided locator and gets a value from each.
        /// </summary>
        /// <param name="actor">The Screenplay Actor.</param>
        /// <param name="driver">The Selenium web driver.</param>
        /// <param name="locator">Locator used to find Web elements.</param>
        /// <param name="getValue">The method used to obtain the desired value from each Web element.</param>
        /// <returns>A list of string values from each Web element found.</returns>
        public static IEnumerable <string> GetValues(IActor actor, IWebDriver driver, IWebLocator locator, Func <IWebElement, string> getValue)
        {
            actor.WaitsUntil(Existence.Of(locator), IsEqualTo.True());
            var elements = driver.FindElements(locator.Query);
            var strings  = from e in elements select getValue(e);

            // ToList() will avoid lazy evaluation
            return(strings.ToList());
        }
        public void WhereTheItemAtPositionIsEqualToValue_WithJustOneItemAndNotExistentItemInPosition_ShouldThrowException()
        {
            int[]  array = { 1 };
            int    index = 1;
            Action act   = () => IsAnEnumerable <int> .WhereTheItemAtPosition(index, IsEqualTo.Value(1)).Evaluate(array);

            act.Should().Throw <ScreenplayException>()
            .WithMessage($"Index {index} is out of range for the IEnumerable<{typeof(int)}> with count {array.Count()}");
        }
Esempio n. 11
0
        /// <summary>
        /// Checks an element if not already selected
        /// Useful for checkboxes or radio buttons
        /// </summary>
        /// <param name="actor">The Screenplay Actor.</param>
        /// <param name="driver">The WebDriver.</param>
        public override void PerformAs(IActor actor, IWebDriver driver)
        {
            actor.WaitsUntil(Appearance.Of(Locator), IsEqualTo.True());
            bool selectedState = actor.AsksFor(SelectedState.Of(Locator));

            if (selectedState != CheckState)
            {
                actor.AttemptsTo(Click.On(Locator));
            }
        }
        /// <summary>
        /// Makes a direct call to a JavaScript element and returns the result.
        /// </summary>
        /// <param name="actor">The actor.</param>
        /// <param name="driver">The WebDriver.</param>
        /// <returns></returns>
        public override TValue RequestAs(IActor actor, IWebDriver driver)
        {
            actor.AttemptsTo(Wait.Until(Existence.Of(Locator), IsEqualTo.True()));

            var e       = driver.FindElement(Locator.Query);
            var newList = Args.ToList();

            newList.Insert(0, e);

            return((TValue)((IJavaScriptExecutor)driver).ExecuteScript(Script, newList.ToArray()));
        }
Esempio n. 13
0
        /// <summary>
        /// Sends keystrokes to the target Web element.
        /// By default, the element will be cleared first, and keystrokes will not be kept private for logging.
        /// Use builder methods to change those defaults.
        /// </summary>
        /// <param name="actor">The Screenplay Actor.</param>
        /// <param name="driver">The WebDriver.</param>
        public override void PerformAs(IActor actor, IWebDriver driver)
        {
            // Wait for the element to exist
            actor.WaitsUntil(Appearance.Of(Locator), IsEqualTo.True());

            // Get the element
            IWebElement element = driver.FindElement(Locator.Query);

            // Clear the element if appropriate
            if (Clear)
            {
                if (UseClearMethod)
                {
                    // Use the plain-old "Clear" method
                    element.Clear();
                }
                else
                {
                    // How many backspaces should be sent?
                    // One for each character in the input!
                    int length = element.GetAttribute("value").Length;

                    if (length > 0)
                    {
                        // Send the backspaces
                        string backspaces = string.Concat(Enumerable.Repeat(Keys.Backspace, length));
                        element.SendKeys(backspaces);

                        // The browser may put the cursor to the left instead of the right
                        // Do the same thing for delete button
                        string deletes = string.Concat(Enumerable.Repeat(Keys.Delete, length));
                        element.SendKeys(deletes);
                    }
                }
            }

            // Send the keys to the element
            element.SendKeys(Keystrokes);

            // Hit the ENTER key if applicable
            if (FinalEnter)
            {
                element.SendKeys(Keys.Enter);
            }

            // Click on the final "safe" element if given
            if (FinalElement != null)
            {
                actor.AttemptsTo(Click.On(FinalElement));
            }
        }
Esempio n. 14
0
 public void TestWithInValidEmailAddress()
 {
     try
     {
         Wait.Until(Appearance.Of(LoginPage.LoginOrCreateAccuntButton), IsEqualTo.True());
         actor.AttemptsTo(Click.On(LoginPage.LoginOrCreateAccuntButton));
     }
     catch (Exception e)
     {
         actor.AttemptsTo(Click.On(LoginPage.LoginOrCreateAccuntButton2));
     }
     actor.AttemptsTo(SendKeys.To(LoginPage.EmailInput, "testiih123"));
     actor.AttemptsTo(Click.On(LoginPage.ContinueButton));
     actor.WaitsUntil(Appearance.Of(LoginPage.ErrorMessageInvalidUserNamePasswordText), IsEqualTo.True());
     actor.AskingFor(Text.Of(LoginPage.ErrorMessageInvalidUserNamePasswordText)).Should().Be("Please enter a valid Email Id or Mobile Number.");
 }
Esempio n. 15
0
 public void PerformAs(IActor actor)
 {
     try
     {
         Wait.Until(Appearance.Of(LoginPage.LoginOrCreateAccuntButton), IsEqualTo.True());
         actor.AttemptsTo(Click.On(LoginPage.LoginOrCreateAccuntButton));
     }
     catch (Exception e)
     {
         actor.AttemptsTo(Click.On(LoginPage.LoginOrCreateAccuntButton2));
     }
     actor.AttemptsTo(SendKeys.To(LoginPage.EmailInput, Email));
     actor.AttemptsTo(Click.On(LoginPage.ContinueButton));
     actor.AttemptsTo(SendKeys.To(LoginPage.PasswordInput, Password));
     actor.AttemptsTo(Click.On(LoginPage.LoginButton));
 }
Esempio n. 16
0
        /// <summary>
        /// Waits for an element to appear and refreshes the browser if it doesn't appear within the refresh timeout.
        /// Internally calls Wait.
        /// </summary>
        /// <param name="actor">The Screenplay Actor.</param>
        /// <param name="driver">The WebDriver.</param>
        public override void PerformAs(IActor actor, IWebDriver driver)
        {
            // Construct the waiting interaction
            var wait = Wait.Until(Appearance.Of(Locator), IsEqualTo.True())
                       .ForUpTo(TimeoutSeconds).ForAnAdditional(AdditionalSeconds);

            try
            {
                // Wait for the button to appear
                // This page notoriously takes longer to load than others
                actor.AttemptsTo(wait);
            }
            catch (WaitingException <bool> )
            {
                // If the button doesn't load, refresh the browser and retry
                // That's what a human would do
                actor.AttemptsTo(Refresh.Browser());
                System.Threading.Thread.Sleep(RefreshSeconds * 1000);
                actor.AttemptsTo(wait);
            }
        }
Esempio n. 17
0
        /// <summary>
        /// Selects an option by text in a select element.
        /// </summary>
        /// <param name="actor">The screenplay actor.</param>
        /// <param name="driver">The WebDriver.</param>
        public override void PerformAs(IActor actor, IWebDriver driver)
        {
            actor.AttemptsTo(Wait.Until(Existence.Of(Locator), IsEqualTo.True()));

            var select = new SelectElement(driver.FindElement(Locator.Query));

            if (Index != null)
            {
                select.SelectByIndex((int)Index);
            }
            else if (Text != null)
            {
                select.SelectByText(Text, PartialMatch);
            }
            else if (Value != null)
            {
                select.SelectByValue(Value);
            }
            else
            {
                throw new BrowserInteractionException(
                          $"No select method (index, text, or value) provided for Select task");
            }
        }
 /// <summary>
 /// Gets the text of a select Web element's selected option.
 /// </summary>
 /// <param name="actor">The actor.</param>
 /// <param name="driver">The WebDriver.</param>
 /// <returns></returns>
 public override IList <string> RequestAs(IActor actor, IWebDriver driver)
 {
     actor.WaitsUntil(Existence.Of(Locator), IsEqualTo.True());
     return(new SelectElement(driver.FindElement(Locator.Query)).Options.Select(o => o.Text).ToList());
 }
 /// <summary>
 /// Gets the search filter instance.
 /// </summary>
 /// <param name="localName">Name of the local.</param>
 /// <returns></returns>
 private static SearchFilter GetSearchFilterInstance(string localName)
 {
     SearchFilter searchFilter;
     switch (localName)
     {
         case XmlElementNames.Exists:
             searchFilter = new Exists();
             break;
         case XmlElementNames.Contains:
             searchFilter = new ContainsSubstring();
             break;
         case XmlElementNames.Excludes:
             searchFilter = new ExcludesBitmask();
             break;
         case XmlElementNames.Not:
             searchFilter = new Not();
             break;
         case XmlElementNames.And:
             searchFilter = new SearchFilterCollection(LogicalOperator.And);
             break;
         case XmlElementNames.Or:
             searchFilter = new SearchFilterCollection(LogicalOperator.Or);
             break;
         case XmlElementNames.IsEqualTo:
             searchFilter = new IsEqualTo();
             break;
         case XmlElementNames.IsNotEqualTo:
             searchFilter = new IsNotEqualTo();
             break;
         case XmlElementNames.IsGreaterThan:
             searchFilter = new IsGreaterThan();
             break;
         case XmlElementNames.IsGreaterThanOrEqualTo:
             searchFilter = new IsGreaterThanOrEqualTo();
             break;
         case XmlElementNames.IsLessThan:
             searchFilter = new IsLessThan();
             break;
         case XmlElementNames.IsLessThanOrEqualTo:
             searchFilter = new IsLessThanOrEqualTo();
             break;
         default:
             searchFilter = null;
             break;
     }
     return searchFilter;
 }
Esempio n. 20
0
 /// <summary>
 /// Returns true if the element is selected; otherwise false.
 /// </summary>
 /// <param name="actor">The actor.</param>
 /// <param name="driver">The WebDriver.</param>
 /// <returns></returns>
 public override bool RequestAs(IActor actor, IWebDriver driver)
 {
     actor.WaitsUntil(Existence.Of(Locator), IsEqualTo.True());
     return(driver.FindElement(Locator.Query).Selected);
 }
Esempio n. 21
0
 public void WhereTheFirstItemIsEqualToValue_WithFirstItemNotEqual_ShouldBeFalse()
 {
     int[] array = { 1, 2, 3 };
     IsAnEnumerable <int> .WhereTheFirstItem(IsEqualTo.Value(2)).Evaluate(array).Should().BeFalse();
 }
 /// <summary>
 /// Gets the text of a select Web element's selected option.
 /// </summary>
 /// <param name="actor">The Screenplay Actor.</param>
 /// <param name="driver">The WebDriver.</param>
 /// <returns></returns>
 public override string RequestAs(IActor actor, IWebDriver driver)
 {
     actor.WaitsUntil(Existence.Of(Locator), IsEqualTo.True());
     return(new SelectElement(driver.FindElement(Locator.Query)).SelectedOption.Text);
 }
Esempio n. 23
0
 public void Bool_False_False()
 {
     IsEqualTo.False().Evaluate(false).Should().BeTrue();
 }
Esempio n. 24
0
 /// <summary>
 /// Returns true if the element is enabled on the page; false otherwise.
 /// </summary>
 /// <param name="actor">The actor.</param>
 /// <param name="driver">The WebDriver.</param>
 /// <returns></returns>
 public override bool RequestAs(IActor actor, IWebDriver driver)
 {
     actor.AttemptsTo(Wait.Until(Existence.Of(Locator), IsEqualTo.True()));
     return(driver.FindElement(Locator.Query).Enabled);
 }
Esempio n. 25
0
 public void WhereAtLeastOneItemIsEqualToValue_WithAllItemsEqual_ShouldBeTrue()
 {
     int[] array = { 1, 1, 1 };
     IsAnEnumerable <int> .WhereAtLeastOneItem(IsEqualTo.Value(1)).Evaluate(array).Should().BeTrue();
 }
Esempio n. 26
0
 /// <summary>
 /// Clears the text of the web element.
 /// </summary>
 /// <param name="actor">The Screenplay Actor.</param>
 /// <param name="driver">The WebDriver.</param>
 public override void PerformAs(IActor actor, IWebDriver driver)
 {
     actor.WaitsUntil(Appearance.Of(Locator), IsEqualTo.True());
     driver.FindElement(Locator.Query).Clear();
 }
Esempio n. 27
0
 public void String_Expected_Null_False()
 {
     IsEqualTo <string> .Value(null).Evaluate("something").Should().BeFalse();
 }
Esempio n. 28
0
 /// <summary>
 /// Hovers over the web element.
 /// Make sure the proper locator is used, or else hovering may have no effect!
 /// </summary>
 /// <param name="actor">The screenplay actor.</param>
 /// <param name="driver">The WebDriver.</param>
 public override void PerformAs(IActor actor, IWebDriver driver)
 {
     actor.WaitsUntil(Appearance.Of(Locator), IsEqualTo.True());
     new Actions(driver).MoveToElement(driver.FindElement(Locator.Query)).Perform();
 }
Esempio n. 29
0
 /// <summary>
 /// Gets a web element's HTML attribute by name.
 /// </summary>
 /// <param name="actor">The actor.</param>
 /// <param name="driver">The WebDriver.</param>
 /// <returns></returns>
 public override string RequestAs(IActor actor, IWebDriver driver)
 {
     actor.WaitsUntil(Existence.Of(Locator), IsEqualTo.True());
     return(driver.FindElement(Locator.Query).GetAttribute(PropertyName));
 }
Esempio n. 30
0
 public void WhereAtLeastOneItemIsEqualToValue_WithNoItemsEqual_ShouldBeFalse()
 {
     int[] array = { 1, 2, 3 };
     IsAnEnumerable <int> .WhereAtLeastOneItem(IsEqualTo.Value(4)).Evaluate(array).Should().BeFalse();
 }
Esempio n. 31
0
 public void Bool_True_True()
 {
     IsEqualTo.True().Evaluate(true).Should().BeTrue();
 }