Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Клик по ссылке или по вложенному в нее элементу?

webdriver
Теги: #<Tag:0x00007f7b6252bce8>

(Ddos1) #1

Подскажите как правильно?
есть ссылка с вложенным тегом img, чтобы перейти по ссылке мне нужно передать локатор ссылки или img?
Пример:
<a id='cl' href='http://www.example.com'><img id='im' src='img.jpg'></a>
Правильно так:
driver.find_element_by_css_selector("#cl").click()
или так:
driver.find_element_by_css_selector("#im").click()
и если у нас вместо img будет h1 и т.д.?


(Bolatbek) #2

Если id - уникален.
driver.find_element(By.ID, “cl”).click()
driver.find_element_by_id(“cl”).click()

Если неважен факт кликанья:
driver.get(“http://www.example.com”) # нам необязательно кликать, если цель - просто перейти по ссылке )))

Если id может повториться у других элементов:
driver.find_element(By.XPATH, “//*a[@id=‘cl’]”).click()
driver.find_element_by_xpath("//*a[@id=‘cl’]").click()


(Ddos1) #3

Нет, вопрос был не в этом.
Меня интересует на какой элемент кликать, что бы это было правильно с точки зрения “максимально приблизить тест к реальному поведению пользователя”.
Раньше я не задумываясь кликал по самой ссылке, не обращая внимания на вложенные в нее элементы.
Заметил случаи когда при клике по ссылке ничего не происходило, тогда я начал копать и заметил, что ссылки, в которых есть вложенные элементы (например картинки) не всегда реагируют на клик, но если кликнуть по вложенному элементу то все норм.


(Bolatbek) #4

Ааа, в данном случае я бы кликнул на img.
Проверяю легко - в FF ищу элемент девтулом, и смотрю, на какой элемент ссылается при поднесении курсора.

На скриншоте - первый попавшийся пример, на что надо кликнуть по лого:


(Keiga) #5

Чтобы перейти по ссылке надо кликнуть по ссылке. Ссылка это элемент ‘a’. Кликать надо на него.


(Roma Marinsky) #6

в продолжение клика на элемент ‘a’

можно кликнуть на:
a#cl
a#im
a[href^=“http”] - начинается с http
a[href$=".pdf"] - заканчивается на .pdf
a[href*=“w3schools”] - содержит w3schools

А если говорить про последний скрин, то:
img[alt=‘Логотип’]
А ещё правильнее:
#logo img[alt=‘Логотип’]”

Это всё css локторы


(Roma Marinsky) #7

а попробуй кликнуть сразу на id=“logo”, если ничё не произошло, то если нужна ссылка “http://vse.kz”, то кликай на a[href*=‘vse.kz’]


(Bolatbek) #8

Бывает вариант

<img src="blabla" onClick="onclick()"><img>

Тогда точно на img.


(Roma Marinsky) #9

да-да


(Ddos1) #10

У меня не стоит задача найти локатор для элемента или “вочтобытонистало” кликнуть по ссылке…
хотел узнать как максимально точно смоделировать ситуацию когда пользователь кликает по вложенному элементу в тег <a>.
Следующий код доказал, что нужно кликать по вложенному элементу:
<a href="https://www.google.com.ua/" onclick="alert('Click a')"> <img src="https://www.google.com.ua/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png" onclick="alert('Click img')"> </a>
Т.е. сначала выскакивает алерт с текстом “'Click img”, а затем “Click a”. Точно также будет если вместо тега <img> будет <h1> и т.д.


(Bolatbek) #11

Выше был мой комментарий с картинкой.
Доверьтесь девтулу.