Не удается совершить клик на элемент в "тултипе"

Добрый день!
По своему желанию осваиваю автоматизацию тестирования. Тестирую проект, на котором столкнулся с проблемой. Возможно ее решение где-то уже всплывало на форуме. Не серчайте сильно.
Суть проблемы. Я хочу совершить переход в личный кабинет, но не получается совершить клик и выбор пункта “View Profile”.
Селектом выбрать не получается. По виду выпадающий список напоминает тултип.


Подскажите как верно будет выбрать “View Profile”?

Решение зависит от конкретной ситуации.

  1. Использовать ожидание.
    5. Waits — Selenium Python Bindings 2 documentation
    1.1. Кликаем на иконку с пользователем
    1.2 Ожидаем появления окна с “подсказкой”
    1.3 Кликаем на профиль

  2. Использовать сложные действия в браузере (если совсем никак по другому!)
    7. WebDriver API — Selenium Python Bindings 2 documentation

Пробуем последовательно варианты. Будут вопросы - код тестов и stacktrace ошибок обязательно.

1 лайк

Ждете появления нужного элемента (саму ссылку) и жмакаете на него.

мм… спасибо. попробую

Добрый день!
Проблему не получилось решить. Такое впечатление, что даже первый клик на иконку с пользователем не происходит.
Ниже код теста и stacktrace

from selenium import webdriver
import unittest, os
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

class Test1(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.set_window_size(1920, 1080)
        self.driver.implicitly_wait(30)
        self.base_url = "https://test.com/"
        self.verificationErrors = []
        self.accept_next_alert = True

    def test_1(self):
        #Open page and authorization
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_xpath("//a[@href='http://app.test.com/login']").click()
        driver.find_element_by_xpath("//input[@name='login']").clear()
        driver.find_element_by_xpath("//input[@name='login']").send_keys("test@test.ru")
        driver.find_element_by_xpath("//input[@name='password']").clear()
        driver.find_element_by_xpath("//input[@name='password']").send_keys("123456")
        driver.find_element_by_xpath("//button[@type='submit']").click()

        #Find element in tooltip and click
        driver.find_element_by_css_selector("p.name").click()
        wait = WebDriverWait(driver, 10)
        profile = wait.until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, 'View Profile')))
        profile.click()

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)


if __name__ == "__main__":
    unittest.main()
======================================================================
ERROR: test_1 (__main__.Test1)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:/Test/LK/test1.py", line 32, in test_1
    profile = wait.until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, 'View Profile')))
  File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 

----------------------------------------------------------------------
Ran 1 test in 41.446s

FAILED (errors=1)

Буду благодарен за помощь

Ну так может, это и проверить в режиме дебаггера (по шагам)? Скорее всего клик-то проходит, только не потому элементу, которому нужно. Нужно проверить селектор

 driver.find_element_by_css_selector("p.name").click()

Возможно, он не уникальный на странице.

После клика на “p.name” поставь большой слип на 20 секунд.
И смотри визуально - появился ли “View profile”.
Самый легкий способ “дебаггинга”)))
Ну или прикрутить создание скриншотов после фейла. И смотреть скрины.

1 лайк

xD Нехай нормально учитцо дебажить.

1 лайк

“p.name” является уникальным селектором.
обращался к этому элементу и по xpath “/html/body/header/div[1]/div/div[2]/p”
клика не происходит


по шагам в дебаггере и с time.sleep(20) визуально не видно, чтобы происходил клик.

Тогда тупик… Может кто еще подскажет умные мысли?

Попробуйте кликать не на
p.name
а на
div.header__userboard.js-userboard
возможно обработчик висит именно на нем.

кликаю на шаг выше

driver.find_element_by_xpath("/html/body/header/div[1]/div/div[2]").click()

также никакой реакции

Пробуй еще, ищи, пока не кликнется и откроется тултип)))

Запиши через Selenium IDE и посмотри какой локатор выбирается xD

:slightly_smiling_face:
думаешь не пробовал уже?)
p.name выбирается и затем //a[contains(@href, ‘/profile’)]
при переходе в профиль сыпется тест в ide

беда (

А там действительно надо кликать? Может достаточно подвести курсор?
Попробуй actions.

да, там нужно кликать.

Прямо любопытно стало.
Может по тимвьюверу покажешь?

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