Перейти к содержимому

DedPerded

Регистрация: 01 авг 2018
Offline Активность: 15 авг 2018 19:10
-----

Мои сообщения

В теме: ChromeDriver перестал видеть элементы

15 августа 2018 - 19:13

Вопрос: как исправить данную ситуацию?

 

При работе с хромдрайером вылетают ошибки о том, что данный элемент не найден. Ни селекторы, ни идентификаторы, ни xpath. В коде ничего не менялось. :)

Думал, что проблема с ОС, т.к. нашлось нарушение целостности файловой системы, но данный вопрос был решён, а вот проблемы с ХромДрайвером остались. Везде работает как надо, на YouTube начинает капризничать.

 

В итоге поменял хромдрайвер на геко. Больше ничего не менял, и, вуаля, всё находится и выполняется так, как было задумано. Значит, проблема явно не в некорректности идентификаторов или селектором нужных элементов. С чем такое может быть связано?

 

GeckoDriver медленнее работает. В google.ru ответа не нашёл. В документации ХромДрайвера тоже изменений не вычитал.

 

Вариант, что проблема с самим ПК тоже отпадает.


В теме: Selenium Webdriver перестал видеть элементы

03 августа 2018 - 21:36

Спасибо тем, кто проявил интерес к теме.

В общем, вопрос решил. Решил сменой ChromeDriver на GeckoDriver. Всё вернусь в рабочее состояние, теперь только протестировать все возможные косяки, потому что GeckoDriver заметно медленнее ChromeDriver. :)

 

Полагаю, что проблема с нарушением целостности файловой системы. Решил проверить на всякий случай и увидел, что беда затаилась и ждала своего часа. Видимо, какие-то файлы, связанные с ХромДрайвером были повреждены в результате "чего-то". Будем теперь решать данную проблему.

 

Прошу прощения, если тема и мои вопросы казались глупыми. Быть может, кто-нибудь в будущем тоже столкнется с подобными проблемами и найдёт решение в этом сообщении.


В теме: Selenium Webdriver перестал видеть элементы

02 августа 2018 - 15:35

1. Точно ли новое окно открывается? Не стало ли блокироваться браузером?

2. Если таки новое окно открывается, то происходит ли переключение на него?

 1. Да. Ничего не блокируется.

 2. Да, при помощи:

driver.SwitchTo().Window(driver.WindowHandles.Last());

В теме: Selenium Webdriver перестал видеть элементы

02 августа 2018 - 14:35

for (int i = 1; ; i++)
                {
                    IWebElement Badooms = driver.FindElement(By.XPath("*//div/div[2]/div/div[2]/input[1]"));
                    Actions perfrom = new Actions(driver);
                    perfrom.MoveToElement(Badooms).Build().Perform();
                    perfrom.Click(Badooms).Build().Perform();

                    Thread.Sleep(3500);
                    driver.SwitchTo().Window(driver.WindowHandles.Last());
                    Thread.Sleep(500);

                    IWebElement knopkus;
                    try
                    {
                        knopkus = driver.FindElement(By.CssSelector("#container > div.main-content > div > div > div > div:nth-child(3) > span"));                        
                    } 
                    catch(NoSuchElementException)
                    {
			/*При нажатии на "Badooms" происходит открытие нового окна. Если не открывается, то срабатывает исключение и цикл
			завершается, что теперь и происходит постоянно. Но в том-то и дело, что новое окно открывается и данный элемент есть
			на странице. Уже 10 раз перепроверил.*/
                        break;
                    }
                            
                    try
                    {
                        IWebElement problemus = driver.FindElement(By.CssSelector("#container > div.main-content > div > div > div > div:nth-child(2) > a"));                        
                    }
                    catch(NoSuchElementException)
                    {
                        Actions bttn = new Actions(driver);
                        bttn.MoveToElement(knopkus).Build().Perform();
                        bttn.Click(knopkus).Build().Perform();
                    }

                    driver.Close();
                    driver.SwitchTo().Window(driver.WindowHandles.First());
                }                
                        
                Actions wt0_2 = new Actions(driver); /*Программа постоянно прыгает сюда, т.к. цикл прерывается. Но окно, открытое по нажатию
		на элемент "Badooms", активно. Соответственно, вылетают ошибки об отстутсвии элемента.*/
                wt0_2.MoveToElement(button2).Build().Perform(); //Элемент "button2" задан ранее. Перед циклом.
                wt0_2.Click(button2).Build().Perform();

Еще вчера утром данный код работал так, как мне надо. Без каких-либо ошибок. В нём и на искомом сайте ничего не менялось. Проверил уже 10ки раз...
В логе просто выдает, что программа остановлена по ошибке Seleniuma о невозможности найти нужный элемент. Но всё эти элементы, их идентификаторы, пути и селекторы, которые используются в программе, остались на месте. Никто ничего не менял.


В теме: Обработка исключения с невидимым элементом.

02 августа 2018 - 07:35

так вы делайте try catch в строке 15, а ещё лучше весь блок своего скрипта оберните в try catch

 

да и вообще, хороший тон, это обрабатывать исключения там, где они могут возникнуть =)

 Здравствуйте. Действительно, всё работает теперь. Спасибо!