34 private bool CloseMultipleWindows(
Selector selectors)
36 logger?.Log(LogLevel.Info,
"Enter CloseMultipleWindows");
39 if (uiAutomation.AdvancedWaitForElement(selectors))
45 logger?.Log(LogLevel.Info,
"Scanning for and closing {0} windows, attempt: {1}", selectors.Count, attempt);
46 foreach (
string selector
in selectors)
48 this.CloseWindow(selector);
50 areOpen = uiAutomation.AdvancedWaitForElement(selectors, 500);
51 }
while (areOpen && attempt++ < 3);
55 logger?.Log(LogLevel.Warn,
"Failed to completely close all {0} windows", selectors.Count);
59 logger?.Log(LogLevel.Debug,
"{0} windows are closed", selectors.Count);
64 logger?.Log(LogLevel.Info, $
"Exception trying to close multiple windows [{ex.Message}]");
76 private bool CloseWindow(
string selector, params
string[] additionalCloseButtons)
78 logger?.Log(LogLevel.Info,
"Enter CloseWindow");
81 if (additionalCloseButtons.Count() > 0)
83 CloseButtons.AddRange(additionalCloseButtons);
86 if (uiAutomation.WaitForElement(selector, maxWait: 500))
88 List<Func<bool>> closeMethods =
new List<Func<bool>> {
89 ()=>this.ImageClose(selector,CloseButtons),()=> this.BoundClose(selector),
90 ()=> this.HardClose(selector), ()=> this.HardClose(selector,useHardwareEvent:
true)
96 logger?.Log(LogLevel.Info,
"Closing window, attempt {0}", attempt);
97 foreach (Func<bool> method
in closeMethods)
101 isClose = uiAutomation.WaitForElementDisappear(selector, 2000);
105 }
while (!isClose && attempt++ < 3);
109 logger?.Log(LogLevel.Debug,
"Window is close");
115 logger?.Log(LogLevel.Error, $
"Error CloseWindow {ex.Message}");
120 CloseButtons.RemoveAll(btn => additionalCloseButtons.Contains(btn));
130 private bool HardClose(
string selector,
bool useHardwareEvent =
false)
134 string methodName = useHardwareEvent ?
"HardClose with hardware event" :
"HardClose";
135 logger?.Log(LogLevel.Debug,
"{0}: closing window", methodName);
136 if (uiAutomation.WaitForElement(selector))
138 Action closeAction = delegate {
139 uiAutomation.SetForegroundWindow(selector);
140 uiAutomation.CloseElement(selector, useHardwareEvents: useHardwareEvent);
143 if (!Extend.StopWatchLoop(closeAction, () => uiAutomation.WaitForElementDisappear(selector, maxWait: 1000), 15000))
148 logger?.Log(LogLevel.Debug,
"{0}: Window is closed", methodName);
154 logger?.Log(LogLevel.Error, $
"Error HardClose {ex.Message}");
164 private bool BoundClose(
string selector)
168 if (uiAutomation.WaitForElement(selector))
170 AutomationElement windowElement = uiAutomation.SelectorToElement(selector);
171 if (windowElement ==
null || !windowElement.Exists())
173 logger?.Log(LogLevel.Error,
"BoundClose: window element of selector is not exist");
176 Rectangle windowBound = windowElement.Bounds();
177 if (windowBound.IsEmpty)
179 logger?.Log(LogLevel.Error,
"BoundClose: window bounds are empty");
183 Action closeAction = delegate {
184 uiAutomation.SetForegroundWindow(selector);
185 InputSimulator.MouseClick(windowBound.Right - 20, windowBound.Top + 10);
188 if (!Extend.StopWatchLoop(closeAction, () => uiAutomation.WaitForElementDisappear(selector, maxWait: 1000), 15000))
194 logger?.Log(LogLevel.Debug,
"BoundClose: Window is closed");
200 logger?.Log(LogLevel.Error, $
"Error BoundClose {ex.Message}");
211 private bool ImageClose(
string selector, List<string> closeImages)
215 logger?.Log(LogLevel.Debug,
"ImageClose: closing window");
216 if (uiAutomation.WaitForElement(selector))
218 AutomationElement windowElement = uiAutomation.SelectorToElement(selector);
219 if (windowElement ==
null || !windowElement.Exists())
221 logger?.Log(LogLevel.Error,
"ImageClose: window element of selector is not exist");
224 Rectangle windowBound = windowElement.Bounds();
225 if (windowBound.IsEmpty)
227 logger?.Log(LogLevel.Error,
"ImageClose: window bounds are empty");
231 Action closeAction = delegate {
232 uiAutomation.SetForegroundWindow(selector);
233 imageHelper.ClickAnyWhenPresentInRegion(closeImages, windowBound, maxWait: 1000);
236 if (!Extend.StopWatchLoop(closeAction, () => uiAutomation.WaitForElementDisappear(selector, maxWait: 1000), 15000))
241 logger?.Log(LogLevel.Debug,
"ImageClose: window is close");
247 logger?.Log(LogLevel.Error, $
"Error ImageClose {ex.Message}");