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

Фотография

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

c# Slenium webdriver

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 DedPerded

DedPerded

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 02 августа 2018 - 07:45

Доброго времени суток!

 

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


  • 0

#2 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 02 августа 2018 - 08:10

Форумные экстрасенсы сегодня отдыхают. Не могли бы вы предоставить логи, например?


  • 2

#3 DedPerded

DedPerded

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 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 о невозможности найти нужный элемент. Но всё эти элементы, их идентификаторы, пути и селекторы, которые используются в программе, остались на месте. Никто ничего не менял.


  • 0

#4 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 02 августа 2018 - 14:56

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

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


  • 1

#5 DedPerded

DedPerded

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 02 августа 2018 - 15:35

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

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

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

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

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

  • 0

#6 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 03 августа 2018 - 08:25

А можно полный текст ошибки, которая Вам выдаётся?

Желательно сначала добавить printStackTrace в кэтчи (чтобы выводился текст перехваченного исключения).

 

Еще вариант - запустите дебаггером, поставьте брекпоинт на "Actions wt0_2 = ..." и попробуйте в открытом браузере найти элемент по локатору "#container > div.main-content > div > div > div > div:nth-child(3) > span"


  • 1

#7 DedPerded

DedPerded

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 03 августа 2018 - 21:36

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

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

 

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

 

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


  • 0



Темы с аналогичным тегами c#, Slenium webdriver

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных