XPATH для динамических выпадающих стрелок на основе графического интерфейса Selenium

#selenium #user-interface #xpath #dynamic #drop-down-menu

Вопрос:

Я новичок в этом сценарии с графическим интерфейсом…. Мое требование состоит в том, что я хочу нажать на стрелку раскрывающегося списка, и внутри есть несколько элементов с древовидной структурой, чтобы выбрать конкретный узел/сигнал тревоги..

Поэтому изначально мне нужно взломать XPATH для выпадающей стрелки «СЧЕТЧИКИ», введите описание изображения здесь

введите описание изображения здесь, используя Xpath, используя абсолютный Xpath, как показано ниже :

         WebDriverWait(self.driver, 70).until(
            EC.element_to_be_clickable((By.XPATH,
                                        "/html/body/div/pm-application/epic-layout/div/div/div/div[5]/div[4]/epic-layout-panel/div/div/div/pm-reporting/epic-layout/div/div/div/div[3]/div[4]/epic-layout-panel/div/pm-tree-wrapper/div/div/div[1]/div[2]/div[1]/div[2]/div/div[2]/div/div[1]/div/div/div[3]/span/i")))
 

Также и с относительными путями :

  1.         WebDriverWait(self.driver, 70).until(
             EC.element_to_be_clickable((By.XPATH, "//div[@id='1483f603-ed09-6586-16e8-fc074ea8f908']//span//i[@class='icon tree-node-arrow collapsed']")))
     
  2.         WebDriverWait(self.driver, 70).until(
             EC.element_to_be_clickable((By.XPATH,
                                         "//*[@class='virtual-tree']//*[@class='icon tree-node-arrow collapsed']")))
     
  3. WebDriverWait(self.драйвер, 70).до тех пор, пока(
    EC.element_to_be_clickable((По.XPATH,
    «//i[@class=»дерево значков-узел-стрелка расширена»]»)))

Но все же я сталкиваюсь с проблемой ниже , пожалуйста, помогите мне решить эту проблему

Ошибка атрибута: объект ‘str’ не имеет атрибута ‘find_element’

Комментарии:

1. Предоставленные строки кода не могут быть причиной для предоставленной трассировки исключений. Показать точную строку, которая вызывает исключение

2. Я добавил полный html-код на скриншоте, пожалуйста, посмотрите

3. Нет необходимости проверять HTML-код. Покажите свой код. Исключение совершенно очевидно: вы пытаетесь вызвать метод find_element из строкового объекта. Показать строку кода с find_element . Также покажите, что находится EC в вашем коде

4. Ниже приведен код, который я использую

5. def search_counter_in_performance_manager(self): попробуйте: WebDriverWait(self.драйвер, 70).до тех пор, пока( EC.element_to_be_clickable((По.XPATH, «//div[@id=’1483f603-ed09-6586-16e8-fc074ea8f908′]//span//i[@class=’дерево значков-узел-стрелка свернута’]»))) WebDriverWait(self.драйвер, 70).до( кроме исключения BaseException: logger.fatal(«Фатальное исключение произошло внутри Счетчика Поиска В PM()».формат(self.name)) logger.error(traceback.print_exc()) В этом пути Xcode указаны числа, а не строка

Ответ №1:

Пожалуйста, прочитайте о селекторах CSS и селекторах Xpath. Им обоим не нравятся белые или пустые места.

Рекомендуется указывать Селену фактический тег элемента, а не только знак звездочки.

Вот пример элемента find с использованием селектора CSS:

  • «div[класс*=’узел дерева’]»

Этот селектор вернет все элементы div, атрибут класса которых содержит фразу «узел дерева».

Используя xpath, вы также можете найти элементы по их атрибутам или по тексту, написанному внутри них:

  • «//div[содержит(текст(),’333′)]»

Этот селектор выдаст все элементы div, внутри которых есть текст 333