static void HideAlert(Alert alertToHide) { if (alertToHide == null) { return; } if (!Driver.Url.Contains("/facebook.com/notifications")) { Driver.Navigate().GoToUrl("https://www.facebook.com/notifications"); } WaitRandom(); LogEvent($"Скриване на предходното известие...", alertToHide); var alertsLocator = By.CssSelector("ul[data-testid=see_all_list] li"); var spinnerLocator = By.CssSelector("img[color='white']"); IEnumerable <IWebElement> elements = null; try { Wait.Until(ExpectedConditions.ElementIsVisible(alertsLocator)); } catch (Exception ex) { throw new CantHideAlertException("Списъкът с известия не беше намерен", ex); } // wait for alerts int retrieveAlertsRetries = 5; int retrieveAlertsAttempt = 0; while (retrieveAlertsAttempt < retrieveAlertsRetries) { try { Wait.Until(ExpectedConditions.ElementIsVisible(alertsLocator)); elements = FindElements(alertsLocator); int minAlertsToProceed = 6; if (elements.Count() < minAlertsToProceed) { LogEvent($"Изчакване #{retrieveAlertsAttempt+1} да се заредят още известия..."); retrieveAlertsAttempt++; WaitRandom(); continue; } else { break; } } catch (Exception ex) { throw new CantHideAlertException($"Известията не можаха да бъдат намерени по време на скриването на старо известие", ex); } } foreach (var element in elements) { Alert currentAlert = Alert.FromElement(element); if (currentAlert.alert_id != alertToHide.alert_id) { continue; } try { Hover(element); Hover(element); WaitRandom(); var dropdownLocator = By.CssSelector("a[aria-label='Notification options']"); var dropdown = element.FindElement(dropdownLocator); Wait.Until(ExpectedConditions.ElementToBeClickable(dropdown)); dropdown.Click(); } catch (Exception ex) { throw new CantHideAlertException("Не беше намерено контекстното меню", ex); } try { var menuItemSelector = By.CssSelector("a[role='menuitem']"); Wait.Until(ExpectedConditions.ElementExists(menuItemSelector)); Wait.Until(ExpectedConditions.ElementToBeClickable(menuItemSelector)); var menuItem = FindElement(menuItemSelector); // first one WaitRandom(); Hover(menuItem); WaitRandom(); menuItem.Click(); } catch (Exception ex) { throw new CantHideAlertException("", ex); } return; } throw new CantHideAlertException($"Известието за скриване не беше намерено сред общо {elements.Count ()} други известия"); }
/// <summary> /// Retrieves target alert. /// </summary> /// <returns>The alert.</returns> static Alert GetAlert() { LogEvent("Търсене на известия..."); Driver.Navigate().GoToUrl("https://facebook.com/notifications"); Wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector("ul[data-testid=see_all_list] li"))); WaitRandom(); var alertElements = FindElements(By.CssSelector("ul[data-testid=see_all_list] li")); KeyValuePair <Alert, IWebElement>[] alertArrayKV = alertElements .Select(x => new KeyValuePair <Alert, IWebElement> (Alert.FromElement(x), x)) .OrderByDescending(x => x.Key.microtime_sent).ToArray(); Alert resultAlert = null; IWebElement element = null; KeyValuePair <Alert, IWebElement> alertKV = new KeyValuePair <Alert, IWebElement> (null, null); foreach (var kv in alertArrayKV) { if (kv.Value.Text.Contains("добави ")) { alertKV = kv; break; } if (kv.Value.Text.Contains("добавиха ")) { alertKV = kv; break; } if (kv.Value.Text.Contains("публикува в")) { alertKV = kv; break; } if (kv.Value.Text.Contains("публикуваха в")) { alertKV = kv; break; } if (kv.Value.Text.Contains("коментира ")) { alertKV = kv; break; } if (kv.Value.Text.Contains("коментираха ")) { alertKV = kv; break; } } if (alertKV.Key != null) { resultAlert = alertKV.Key; Hover(alertKV.Value); LogEvent($"Избрано известие {resultAlert.Url ()}", resultAlert); } WaitRandom(); return(resultAlert); }