bool ExecuteLabelWithSimpleCheck(ExecuteLabelBehavior exe) { if (_RType != LabelExpectedResultType.Nothing) { switch (_RType) { case LabelExpectedResultType.UrlChange: string beforeUrl = Modules.BrowserSupport.GetCurrentUrl(); exe(); ExecuteSleepAfterIfThereIs(); string afterUrl = Modules.BrowserSupport.GetCurrentUrl(); return(!beforeUrl.Equals(afterUrl)); case LabelExpectedResultType.UrlChangeEqualInputData: exe(); string url = Modules.BrowserSupport.GetCurrentUrl().Trim(new char[] { ' ', '/' }); string urlCompare = GetInputDataAsString().Trim(new char[] { ' ', '/' }); return(url.Equals(urlCompare, StringComparison.CurrentCultureIgnoreCase)); default: throw new MyExceptions.LabelExecutionResultFailException("Expected result type " + _RType + " has not yet been handled in execute action"); } } else { exe(); return(true); } }
bool ExecuteLabelWithCheckCurrentElement(ExecuteLabelBehavior exe) { if (_elmTarget == null) { _elmTarget = Modules.BrowserSupport.FindElement(_LabelData.XPath); } switch (_RType) { case LabelExpectedResultType.SelfCssClassChange: string beforeValue = _elmTarget.GetAttribute("class"); exe(); ExecuteSleepAfterIfThereIs(); string afterValue = _elmTarget.GetAttribute("class"); return(beforeValue.Equals(afterValue)); case LabelExpectedResultType.SelfTextChange: string beforeText = _elmTarget.Text; exe(); ExecuteSleepAfterIfThereIs(); string afterText = _elmTarget.Text; return(beforeText.Equals(afterText)); case LabelExpectedResultType.UrlChangeContainHref: string href = _elmTarget.GetAttribute("href"); exe(); ExecuteSleepAfterIfThereIs(); string url = Modules.BrowserSupport.GetCurrentUrl(); return(url.IndexOf(href) >= 0); default: throw new MyExceptions.LabelExecutionResultFailException("Expected result type " + _RType + " has not yet been handled in execute action"); } }
bool ExecuteLabelWithCheckOnAnotherElement(ExecuteLabelBehavior exe) { if (string.IsNullOrEmpty(_LabelData.ResultXPath)) { throw new MyExceptions.LabelExecutionResultFailException("Result XPath cannot be null"); } exe(); ExecuteSleepAfterIfThereIs(); IWebElement elmResult = Modules.BrowserSupport.FindElement(_LabelData.ResultXPath); if (elmResult == null) { if (_RType == LabelExpectedResultType.SomethingNotDisplayed) { return(true); } else { throw new MyExceptions.LabelExecutionResultFailException("Cannot get expected result element"); } } switch (_RType) { case LabelExpectedResultType.SomethingDisabled: return(!elmResult.Enabled); case LabelExpectedResultType.SomethingDisplayed: return(elmResult.Displayed); case LabelExpectedResultType.SomethingEnabled: return(elmResult.Enabled); case LabelExpectedResultType.SomethingNotDisplayed: return(!elmResult.Displayed); default: throw new MyExceptions.LabelExecutionResultFailException("Expected result type " + _RType + " has not yet been handled in execute action"); } }
/// <summary> /// /// </summary> /// <param name="label"></param> /// <param name="returnDatas">Should be set to action.ReturnDataCollection. /// Also can be null if label not require input data. Dictionary key is the label /// name that provide the input</param> public LabelObject(Models.ElementLabel label, Dictionary <string, object> inputDatas) { if (_rgParameter == null) { var pattern = "{.+?}"; _rgParameter = new Regex(pattern); } _LabelData = label; _inputDatas = inputDatas; _maxLabelErrors = int.Parse(System.Configuration.ConfigurationManager.AppSettings["maxlabelerrors"]); _SetCurrentElement = label.SetCurrentElement; _WType = (WaitType)label.WaitType; _behavior = (WebElementBehavior)label.ExpectedBehavior; switch (_behavior) { case WebElementBehavior.BrowseToUrlInCustomData: ExecuteLabel = BrowseToUrlInCustomData; break; case WebElementBehavior.GetIWebElements: ExecuteLabel = GetIWebelements; break; case WebElementBehavior.ClickByXPath: ExecuteLabel = ClickByXPath; break; case WebElementBehavior.ClickByXPathIfStillExists: ExecuteLabel = ClickByXPathIfStillExists; break; case WebElementBehavior.GetHtmlAgilityNodeCollection: ExecuteLabel = GetHtmlAgilityNodeCollection; break; case WebElementBehavior.GetInnerHtml: ExecuteLabel = GetInnerHtml; break; case WebElementBehavior.GetInnerText: ExecuteLabel = GetInnerText; break; case WebElementBehavior.GetIWebElement: ExecuteLabel = GetIWebelement; break; case WebElementBehavior.GetValueByXPathNavigator: ExecuteLabel = GetValueByXPathNavigator; break; case WebElementBehavior.LoopClickElements: ExecuteLabel = LoopClickElements; break; case WebElementBehavior.InputText: ExecuteLabel = InputText; break; case WebElementBehavior.ClickLinkButtonBySendKeyEnter: ExecuteLabel = ClickLinkButtonBySendKeyEnter; break; case WebElementBehavior.MouseOver: ExecuteLabel = MouseOver; break; case WebElementBehavior.Scroll: ExecuteLabel = ScrollToValueinInputData; break; case WebElementBehavior.SendEnterKey: ExecuteLabel = PressEnter; break; case WebElementBehavior.SelectOptionInDropDownList: ExecuteLabel = SelectOptionFromDropdown; break; case WebElementBehavior.WaitForSomethingHappen: ExecuteLabel = WaitForSomethingHappen; break; case WebElementBehavior.ReportNoDataFoundBaseOnHtml: ExecuteLabel = ReportNoDataFoundBaseOnHtml; break; case WebElementBehavior.RightClick: ExecuteLabel = RightClick; break; case WebElementBehavior.SaveDataToFile: ExecuteLabel = SaveDataToFile; break; } _RType = (LabelExpectedResultType)label.ExpectedResultType; switch (_RType) { case LabelExpectedResultType.SelfCssClassChange: case LabelExpectedResultType.SelfDisabled: case LabelExpectedResultType.SelfEnabled: case LabelExpectedResultType.SelfNotDisplayed: case LabelExpectedResultType.SelfTextChange: case LabelExpectedResultType.UrlChangeContainHref: ExecuteBehaviorWithCheck = ExecuteLabelWithCheckCurrentElement; break; case LabelExpectedResultType.SomethingDisabled: case LabelExpectedResultType.SomethingDisplayed: case LabelExpectedResultType.SomethingEnabled: case LabelExpectedResultType.SomethingNotDisplayed: ExecuteBehaviorWithCheck = ExecuteLabelWithCheckOnAnotherElement; break; default: ExecuteBehaviorWithCheck = ExecuteLabelWithSimpleCheck; break; } }