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

Фотография

selrnium не видит элемента по локатору


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

#1 biomaks

biomaks

    Постоянный участник

  • Members
  • PipPipPip
  • 171 сообщений
  • Город:Москва


Отправлено 11 мая 2011 - 07:03

Часто сталкиваюсь с тем что в некоторых случаях selenium часто не видит локатора, хотя его же метод selenium.isElementPresent() возвращает по этому локатору true. А вот считать значение или кликнуть по элементу не может, вылетает
com.thoughtworks.selenium.SeleniumException: ERROR: Element xxxxx not found.

Такое также наблюдал с одним и тем же веб приложением но запущенным под разными ОС. Кто сталкивался с подобным поведением или я один такой везунчик? )
  • 0

#2 enki86

enki86

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений


Отправлено 11 мая 2011 - 07:19

предлагаете пообсуждать абстрактно или есть какая-то конкретика?

могу предположить до десятка вариантов почему не работает и еще до десятка javascript извращений web-ресурса, которые могут давать такое поведение
Возможно, нужно ждать не только конкретный элемент но группу элементов либо участок dom
  • 0

#3 biomaks

biomaks

    Постоянный участник

  • Members
  • PipPipPip
  • 171 сообщений
  • Город:Москва


Отправлено 11 мая 2011 - 07:29

предлагаете пообсуждать абстрактно или есть какая-то конкретика?

могу предположить до десятка вариантов почему не работает и еще до десятка javascript извращений web-ресурса, которые могут давать такое поведение

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

#4 enki86

enki86

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений


Отправлено 11 мая 2011 - 07:34

основная рабочая гипотеза - индусский код
в качестве примера могу предложить MS Sharepoint
не так давно задумался, а не начать ли вести блог на тему хитростей и косячностей
  • 0

#5 barancev

barancev

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

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


Отправлено 11 мая 2011 - 07:52

Клик может не работать, если в браузере установлен масштаб отличающийся от 100% (селениум про это не знает, поэтому определяет координаты элементов неправильно).
А вот почему не удается получить значение -- даже предположить не могу. Надо посмотреть конкретный пример, на котором это проявляется.
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#6 vitorg

vitorg

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

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

Отправлено 11 мая 2011 - 09:08

Пока что в 100% таких случаев, докопавшись до причины, обнаруживал, что проблема не в Selenium, а в тестируемом приложении.
  • 0

#7 Dary

Dary

    Активный участник

  • Members
  • PipPip
  • 94 сообщений
  • ФИО:даша

Отправлено 12 мая 2011 - 07:06

У меня совершенно такая же ситуация была, я тоже пыталась жаловаться где-то на этом форуме :)

Причину так и не выяснила, зато узнала о такой штуке как try-catch, которую и применяю при обращении к "исчезающим" элементам.
  • 0

#8 biomaks

biomaks

    Постоянный участник

  • Members
  • PipPipPip
  • 171 сообщений
  • Город:Москва


Отправлено 12 мая 2011 - 07:10

Причину так и не выяснила, зато узнала о такой штуке как try-catch, которую и применяю при обращении к "исчезающим" элементам.

но это не решает проблему отсутствия клика по нужному элементу
  • 0

#9 enki86

enki86

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений


Отправлено 12 мая 2011 - 07:23

ну, не на все ссылки можно кликнуть, это нормально - так сказать - объективная реальность
к примеру:
<a title="Обзор" id="ctl00_PlaceHolderMain_documentPreparationInfoViewUserControl_documentLinksControl_documentPicker_browse" onclick="__Dialog__ctl00_PlaceHolderMain_documentPreparationInfoViewUserControl_documentLinksControl_documentPicker(); return false;" href="javascript:">

Никак не кликните ))
  • 0

#10 biomaks

biomaks

    Постоянный участник

  • Members
  • PipPipPip
  • 171 сообщений
  • Город:Москва


Отправлено 12 мая 2011 - 07:29

да там нормальная ссылка типа
<a href="http:blabla.ru/rest/inbox">Сообщения</a>

  • 0

#11 vitorg

vitorg

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

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

Отправлено 12 мая 2011 - 08:14

зато узнала о такой штуке как try-catch, которую и применяю при обращении к "исчезающим" элементам.

Зачем это вам здесь try/catch? Кликнуть и т.п. вы всё равно не сможете.

Никак не кликните ))

Запросто кликну. Клик - это всего лишь вызов события "click". Если вас смущает href="javascript:" вместе с onclick, то зря, это тоже корректно обрабатывается.

да там нормальная ссылка типа

<a href="http:blabla.ru/rest/inbox">Сообщения</a>

А локатор какой? Берите в руки JS-отладчик и лезьте в исходники Selenium Core, скорее всего обнаружите нечто интересное, но вряд ли виноват будет Selenium, хотя конечно всяко быват :)
  • 0

#12 enki86

enki86

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений


Отправлено 12 мая 2011 - 08:18

Запросто кликну. Клик - это всего лишь вызов события "click". Если вас смущает href="JavaScript" вместе с onClick, то зря, это тоже корректно обрабатывается.

да ни разу :diablo:
что по событию что по клику у вас все свалится
единственный вариант, который я нашел - напрямую вызывать функцию, которая указана в обработчике onclick
другие варианты с вызованми click и fireevent тупо падают со скриптовыми ошибками невменяемого содержания
  • 0

#13 vitorg

vitorg

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

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

Отправлено 12 мая 2011 - 08:42

Что значит свалится? Какое исключение?
Вот сделал тестовый HTML:
<html>
<head>
  <script language="JavaScript">
  function anyFunction(str) {
    document.getElementById('info').textContent+=str;
  }
  </script>
</head>
<body>
<div id="info"></div>
<a onclick="anyFunction('click'); return false;" href="javascript: anyFunction('href');">Ссылка</a>
<body>
</html>
Кликаю мышью - появляется текст "click". С клавиатуры то же самое - "click". Вызываю в Selenium click("link=Ссылка"), и опять появляется текст "click". Всё отлично работает, ничего не валится.

Вызывать функцию из onclick крайне опасно и ни к чему это. Но если уж совсем припрёт, надо будет обойти баг какой или ещё зачем этот костыль понадобится, то лучше уж eval от содержимого сделать, иначе потом можно долго искать причину падения тестов.
  • 0

#14 enki86

enki86

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений


Отправлено 12 мая 2011 - 09:07

ну, я тоже могу написать красивую функцию для такого кода, которая будет работать :acute:
Однако данный стандартный вполне ms sharepoint контрол при клике через javascript выбрасывает ошибку типа аргумент null и ссылается на какую-то миллиардную сроку кода :crazy:

учше уж eval от содержимого сделать

во-первых, не от всего содержимого, а только для функции
а во-вторых, это ровно то, о чем я написал runscript (...)

Тоже валится с ошибкой, кстати, но зато все-таки открывает модальное окно
  • 0

#15 vitorg

vitorg

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

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

Отправлено 12 мая 2011 - 09:16

К сожалению у меня сейчас нет возможности проверить этот MS SharePoint контрол, но как видите проблема не в ссылке (она прекрасно кликается), а скорее всего в каких-то ещё обработчиках, навешанных на этот контрол.

У меня были ситуации когда JS-код был настолько запутан, что для него было важно не только получить определённые события, а получить их в строго установленном порядке.

Я бы всё-таки отыскал и решил по-человечески проблему данного контрола, тем более, что он стандартный, а значит вам постоянно приходится с ним работать. В конце концов можно переопределить Selenium#click и сделать его настоящим мышиным кликом, а не таким каким он является по умолчанию.
  • 0

#16 enki86

enki86

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений


Отправлено 12 мая 2011 - 09:52

боюсь это не возможно
разработчики-индусы (в прямом смысле этого слова) для меня недоступны, а решение такой задачи может занять слишком много времени
это стандартный, вроде как, контрол, но в рамках нашей системы не очень "популярный", к тому же клик по нему это крайнее средство, влекующее за собой гораздо более серьезные проблемы :focus:

Просто пример привел, когда вроде бы нормальная ссылка упорно и никак не кликается
что подсвечивает мои первые посты
  • 0

#17 biomaks

biomaks

    Постоянный участник

  • Members
  • PipPipPip
  • 171 сообщений
  • Город:Москва


Отправлено 12 мая 2011 - 12:44

Как и сказал barancev проблема оказалось в том, что браузеры почему-то масштабировали страницу по своему именно на той страннице где нужно было кликнуть ссылку, причем масштабирование отличалось всего на несколько процентов, визуально не просто было это определить. Этот факт сильно озадачил программистов =)
  • 0

#18 vitorg

vitorg

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

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

Отправлено 12 мая 2011 - 14:02

А как же тогда с получением значения, почему там вылетал ElementNotFoundException? И всё равно не понятно, вы использовали не click, а clickAt? По идее на обычный click масштаб никак не может повлиять.
  • 0

#19 biomaks

biomaks

    Постоянный участник

  • Members
  • PipPipPip
  • 171 сообщений
  • Город:Москва


Отправлено 12 мая 2011 - 14:03

А как же тогда с получением значения, почему там вылетал ElementNotFoundException? И всё равно не понятно, вы использовали не click, а clickAt? По идее на обычный click масштаб никак не может повлиять.

не знаю. разбираемся
  • 0


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

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