Selenium -> WebDriverWait

0

Witam, mam pytanie bo nie potrafię tego zrozumieć. Dla czego w tym momencie mnie wywala.

Ogólnie założenie jest takie iż program ma poczekać na wygenerowanie się jakiegoś inputa przez 3 minuty i dać znać czy znalazł czy nie.

private bool Found_InputOnForms()
        {
            MV_SeleniumAutomatWork.AutomatDo.Controls.ProcessInformation_Add(MV_SeleniumAutomatWork.AutomatDo.Driver.myBrowser.Url);
            try
            {
                WebDriverWait _wait = new WebDriverWait(MV_SeleniumAutomatWork.AutomatDo.Driver.myBrowser, new TimeSpan(0, 3, 0));

                _wait.Until(d => d.FindElement(By.XPath("//input")));   // <- Tutaj wywala 



                return true;

            }
            catch
            {
                return false;
                
            }

 

Treść co mi wyrzuca.

An exception of type 'OpenQA.Selenium.NoSuchElementException' occurred in WebDriver.dll but was not handled in user code

Additional information: no such element: Unable to locate element: {"method":"xpath","selector":"//input"}

(Session info: chrome=48.0.2564.116)

(Driver info: chromedriver=2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),platform=Windows NT 6.1 SP1 x86_64)

Jeżeli np nie zrobię tego w WebDriverWait czylko normalnie próba znalezienia elementu. Cała funkcja działa. Czyli coś się nie uda to zwracam false. Ale w momencie długich przekierowań, i czasem słabego połączenia nie powinno tak być. I trzeba odczekać.

Jeżeli nie użyję funkcji czekającej WebDriverWait. Tylko zwykłego znajdowania elementu. To funkcja mi zwraca, że znalazło lub nie znalazło. Program się nie sypie. Gdy podłoże ten kod działa to tak.

Jeżeli, nie znajdzie elementu to czeka okres i szuka. Działa pięknie przy przekierowaniach i spełnia swoją rolę bo czeka do momentu aż znajdzie. Teraz, mam taki przypadek iż nie zawsze są input na stronie by zweryfikować czy są dalej przekierowania. A w momencie jak ich wcale nie znajdzie. Program za przeproszeniem się wy*******. Chociaż jest w try, i powinien zwrócić wartość false tak mi się zdaje a nie rozłożyć nogi.

Jakieś sugestie dla czego się tak dzieje. Co do Debugera za dużo informacji ^^ jeśli chodzi o cały przebieg silnika selenium by się na szybko w tym połapać

0

Aaa dobra w tej funkcji występują też wyjątki które ja muszę w jakiś sposób obsłużyć. Ok dobra, ale pytanie dalej. Dla czego i tak to wywaliło w try ? Może się mylę, ale zawsze myślałem że jak coś jest w try i się tam wywali. To się po prostu nie wykona i program wypluje catch.

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