/// <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); }
/// <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()); }
/// <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); }
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()); }
/// <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); }
/// <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()); }
/// <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()); }
/// <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()}"); }
/// <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())); }
/// <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)); } }
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."); }
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)); }
/// <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); } }
/// <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; }
/// <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); }
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); }
public void Bool_False_False() { IsEqualTo.False().Evaluate(false).Should().BeTrue(); }
/// <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); }
public void WhereAtLeastOneItemIsEqualToValue_WithAllItemsEqual_ShouldBeTrue() { int[] array = { 1, 1, 1 }; IsAnEnumerable <int> .WhereAtLeastOneItem(IsEqualTo.Value(1)).Evaluate(array).Should().BeTrue(); }
/// <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(); }
public void String_Expected_Null_False() { IsEqualTo <string> .Value(null).Evaluate("something").Should().BeFalse(); }
/// <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(); }
/// <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)); }
public void WhereAtLeastOneItemIsEqualToValue_WithNoItemsEqual_ShouldBeFalse() { int[] array = { 1, 2, 3 }; IsAnEnumerable <int> .WhereAtLeastOneItem(IsEqualTo.Value(4)).Evaluate(array).Should().BeFalse(); }
public void Bool_True_True() { IsEqualTo.True().Evaluate(true).Should().BeTrue(); }