Selenium przechwytywanie popup i nacisnięcie przycisku

0

witam
Chcę stworzyć program, który będzie automatyzował wykonywanie makr. Działać on ma na zasadzie takiej: pobiera ścieżki Url z bazy klienta firefoxa, które spełniają pewne wymogi, następnie otwiera je po kolei co kilka minut i wykonuje ich działanie.
Wszystko fajnie pobiera Urle instaluje niezbędny dodatek, w celu obsłużenia makr i odpala przeglądarkę z tym dodatkiem. Makro działa na takiej zasadzie, że po przejściu pod dany adres czeka kilka sekund i wyskakuje popup z informacją "Czy chcesz uruchomić makro?" gdzie są 3 buttony: "Allow" , "Block", "Inspect source code". I tutaj pojawia się problem, gdyż chcę zautomatyzować tak żeby zawsze klikało button "Allow",ale nie wiem jak mam to zrobić za bardzo :(.

Chciałem to zrobić tak:

//Tworzony jest profil firefoxa
            FirefoxProfile firefoxProfile = new FirefoxProfile();
            FileInfo fi = new FileInfo("D:\\imacros_for_firefox-8.9.6-fx.xpi");
            //Dodaje dodatek do profilu
            firefoxProfile.AddExtension(string.Format("{0}{1}", fi.DirectoryName, fi.Name));
            //Tworzy obiekt IWebDriver o wyznaczonym profilu
            IWebDriver webDriver = new FirefoxDriver(firefoxProfile);

            foreach (var path in macrList)
            {
                Thread.Sleep(3000);
                //url makra
                webDriver.Url = path;
                //czeka aż minie kilka sekund i wyskoczy popup
                Thread.Sleep(8000);
                //szuka elementu, który zawiera treść "Allow"
                IWebElement iw = webDriver.FindElement(By.PartialLinkText("Allow"));
                //naciska element
                iw.Click();
                //czeka iles czasu na skończenie wykonania jednego makra
                Thread.Sleep(60000);

                //Po skonczeniu powtarza operację dla każdego adresu znajdującego się w macrList

                //Wartości w Thread.Sleep są przykładowe
            }

ale niestety nie działa :(. Chyba problemem jest tutaj że nie mogę przejść do tego okna popup, ale nie jestem pewny.

okno jakie wyskakuje wygląda tak:
http://wrzucaj.net/image/YOogV

Jest to okno, które blokuje wszystko w przeglądarce, dopóki się jakiejś z trzech opcji nie wybierze.

Czy moglibyście mi pomóc ?

0

Spróbuj pobawić się z klasą Alert dostępną dla Webdrivera, w Javie wygląda to mniej więcej tak:

Alert alert = driver.switchTo().alert();
alert.accept(); 
0

próbowałem już wcześniej niestety rezultat był taki sam :(. Zapomniałem dodać że czy przy użyciu

IAlert alert = webDriver.SwitchTo().Alert();

czy IWebElement iw = webDriver.FindElement(By.PartialLinkText("Allow"));

 występuje WebDriverException (po ok. minucie może dwóch) wykonywania tych procesów dokładna treść: `Additional information: The HTTP request to the remote WebDriver server for URL http://localhost:7055/hub/session/70c7685b-1056-4f3d-bd80-f71390881865/element timed out after 60 seconds. `

a jeśli ręczni kliknę button "Allow" występuje exception, że nie ma takiego elementu.

Po sprawdzeniu różnych metod wychodzi że po wyskoczeniu popupa nie działa żadna metoda instancji webDriver i dopiero po ręcznym kliknięciu na jakąś z opcji mogę coś zrobić z webDriver
0

jakby komuś się przydało to poradziłem sobie z tym niestety w prymitywny sposób zamiast

IWebElement iw = webDriver.FindElement(By.PartialLinkText("Allow"));
iw.Click();

wpisałem

SendKeys.SendWait("{LEFT}");
                SendKeys.SendWait("{LEFT}");
                SendKeys.SendWait("{ENTER}"); 

Niestety te rozwiązanie nie satysfakcjonuje mnie w ogole, gdyż gdyby np. zmieniła się kolejność przycisków - złe działanie, gdyby okno miało więcej/mniej buttonów to samo, nie można stworzyć tej aplikacji żeby działała w tle itd. :(

Byłbym bardzo wdzięczny gdyby ktoś podał mi lepsze rozwiązanie tego problemu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1