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

Фотография

Как узнать координаты, по которым произошел клик.

Selenium WebDriver C#

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

#1 mazik7

mazik7

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

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мазик
  • Город:Красноярск

Отправлено 21 ноября 2014 - 12:01

Всем добрый день.

 

В тестах возникает ситуация, когда не происходит клик по элементам. Возникает такая ситуация очень редко, но тем не менее это делает тесты относительно нестабильными.

В свое время мы отказались от простого driver.FindElement(By.by).Click() так как, на браузере Firefox вообще не кликался один input.

Вместо этого мы используем другую конструкцию:

Actions builder = new Actions(driver)
IWebElement el = driver.FindElement(By.by)
builder.MoveToElement(el).Click().Build().Perform();

У нас возникли подозрения, что клик просто не проходит по объекту.

Но чтобы это проверить, необходимо знать такие параметры как положение и размер объекта, а также координаты, по которым прошел клик.

 

И если с первыми двумя дело обстоит просто (el.Location, el.Size), то способа извлечь координаты по которым проходит клик - я не знаю.

 

Есть ли способ узнать эти координаты?


  • 0

:smile:


#2 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 21 ноября 2014 - 12:47

Клик происходит по центру элемента.


  • 0

#3 mazik7

mazik7

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

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мазик
  • Город:Красноярск

Отправлено 24 ноября 2014 - 01:30

Клик происходит по центру элемента.

Спасибо капитан =) 
Я знаю это, но убедиться надо бы) Потому что надо понять почему же "Иногда" не кликается) 
Вот вы можете доказать, что он кликается именно по центру?) Лично я не нашел способа, потому то и спрашивал. А ответ типа вашего, в данной ситуации бесполезен)


  • 0

:smile:


#4 mazik7

mazik7

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

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мазик
  • Город:Красноярск

Отправлено 24 ноября 2014 - 04:06

А вообще по каким причинам элемент может не прокликаться, не вызывая при этом никаких исключений, с учетом правильных селекторов и гарантированной прогрузки страницы?


  • 0

:smile:


#5 vmaximv

vmaximv

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

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 24 ноября 2014 - 09:24

гарантированной прогрузки страницы?

А кто дает такую гарантию, если не секрет? Т.к. ваше "Иногда" говорит об обратном.
 
Хотите потратить время на то, что с большой вероятностью вам ничего не даст?
Используйте Actions.moveToElement(WebElement toElement, int xOffset, int yOffset) и вычисляйте координаты клика самостоятельно.
Сам Actions.click() есть

Clicks at the current mouse location


  • 0

#6 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 24 ноября 2014 - 10:04

Я могу подтвердить, что по умолчанию кликается по центру, потому что я знаю, как это реализовано.


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#7 mazik7

mazik7

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

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мазик
  • Город:Красноярск

Отправлено 25 ноября 2014 - 06:38

Я могу подтвердить, что по умолчанию кликается по центру, потому что я знаю, как это реализовано.

На MoveToElement никак не влияет управление реальным курсором мыши?) Хотя мне больше интересно, что из себя представляет селениумовская мышь)

А вообще с моей стороны глупо спорить с одним из разработчиков Selenium) 

 

 

гарантированной прогрузки страницы?

А кто дает такую гарантию, если не секрет? Т.к. ваше "Иногда" говорит об обратном.

 

Скажем так, в нашей системе используется довольно сложная система обработки исключений и все методы обернуты этой самой обработкой исключений.

Например метод FindElement обернут еще и ожиданием этого самого элемента.

То есть, сначала система убеждается, что элемент найден, и после этого - выполняет действие над ним. В противном случае выкидывается исключение пишущее, что такой-то элемент не найден.

 

 

Clicks at the current mouse location

Ага) А вот current mouse location узнать и нельзя было)


  • 0

:smile:


#8 vmaximv

vmaximv

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

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 25 ноября 2014 - 07:29

На MoveToElement никак не влияет управление реальным курсором мыши?) Хотя мне больше интересно, что из себя представляет селениумовская мышь)

С нативными эвентами вполне себе влияет - попробуйте запустить скрипты и при этом активно елозить мышью. Хотите более наглядно - запустите тесты в ИЕ с requireWindowFocus=true.
 

То есть, сначала система убеждается, что элемент найден, и после этого - выполняет действие над ним. В противном случае выкидывается исключение пишущее, что такой-то элемент не найден.

В общем случае наличие элемента на странице не гарантирует, что ее рендер завершен и элемент "кликабельный".


  • 0

#9 mazik7

mazik7

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

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мазик
  • Город:Красноярск

Отправлено 25 ноября 2014 - 07:37

 

То есть, сначала система убеждается, что элемент найден, и после этого - выполняет действие над ним. В противном случае выкидывается исключение пишущее, что такой-то элемент не найден.

В общем случае наличие элемента на странице не гарантирует, что ее рендер завершен и элемент "кликабельный".

 

В таких случаях выкидываются соответсвующие исключения. И тогда - да, знчаит нужно перерабатывать ожидание. Но в моей ситуации, строка просто пропускается как ни в чем не бывало.


  • 0

:smile:


#10 vmaximv

vmaximv

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

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 25 ноября 2014 - 07:44

Узко зрите. Дабы не переливать из пустого в порожнее сделайте так:

sleep(1000);
moveToElement(el).perform();
sleep(1000);
click().perform();
sleep(1000);
type(el,'text').perform();

  • 0

#11 mazik7

mazik7

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

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мазик
  • Город:Красноярск

Отправлено 25 ноября 2014 - 07:53

 

Узко зрите. Дабы не переливать из пустого в порожнее сделайте так:

sleep(1000);
moveToElement(el).perform();
sleep(1000);
click().perform();
sleep(1000);
type(el,'text').perform();

И на месте слипа, я перемещаю курсор, и он кликает по тому месту, куда я переместил. Так должно быть?)
А, ну да, тут же не может быть element is not clickable, так как мы ж по координате клик производим)

Но тестируемый проект не нагромождение окон друг на друге) По крайней мере ошибка подобного рода возникала б стабильно, или я не прав?)


  • 0

:smile:


#12 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 25 ноября 2014 - 09:09

Лучше всего будет, если Вы сможете сделать пример, скажем, на http://jsfiddle.net/, который позволяет воспроизвести проблему.

 

"Шевеление" реальной мыши влияет, если используются нативные события, при использовании синтезированных событий изоляция более полная.


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium



Темы с аналогичным тегами Selenium WebDriver, C#

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

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