コード例 #1
0
        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 ()} други известия");
        }
コード例 #2
0
        /// <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);
        }