Selenium + java, несколько вопросов
#1
Отправлено 19 июля 2010 - 10:08
Имеется несколько вопросов относительно тестирования WEB-приложения в связке Java + selenium.
В принципе особых проблем в работе не испытывал но есть кое какие вещи которые просто не знаю как сделать.
1. Приложение выбрасывает окно с предложением загрузить какой нить файл для просмотра (PDF, XML). Как проверить что данное окно высветилось, как согласиться с загрузкой? Как проверить содержимое (как получить поток данных сохраняемых)
2. Как проверить наличие "*" на экране. Просто звёздочку не ищет так как это означает поиск любого количества символов любых на странице, а если написать "\*" то ругается Java. Вариант с "\\*" тоже не прокатывает
3. Не хочет нажимать на ссылки такого вида <a> Это <br> ссылка</a>, как реализовать?
4. Как проверить что текст помечен красным цветом если в красный окрашен фон ячейки таблицы в которой находится текст. Пробовал искать ячейку по цвету фона через свойства а потом сравнивал внутренний текст с искомым текстом. Не прокатило так как отказывается искать ячейку по свойству bgcolor?
Заранее спасибо за ответы, хотя бы за часть.
#2
Отправлено 19 июля 2010 - 10:58
попробуйте посмотреть вот эти темы:1. Приложение выбрасывает окно с предложением загрузить какой нить файл для просмотра (PDF, XML). Как проверить что данное окно высветилось, как согласиться с загрузкой? Как проверить содержимое (как получить поток данных сохраняемых)
Тема 1
Тема 2
а как вы проверяете *, приведите кусочек кода?2. Как проверить наличие "*" на экране. Просто звёздочку не ищет так как это означает поиск любого количества символов любых на странице, а если написать "\*" то ругается Java. Вариант с "\\*" тоже не прокатывает
#3
Отправлено 19 июля 2010 - 11:10
1. на счет первого, сходу не отвечу, надо подумать...Здравствуйте.
Имеется несколько вопросов относительно тестирования WEB-приложения в связке Java + selenium.
В принципе особых проблем в работе не испытывал но есть кое какие вещи которые просто не знаю как сделать.
1. Приложение выбрасывает окно с предложением загрузить какой нить файл для просмотра (PDF, XML). Как проверить что данное окно высветилось, как согласиться с загрузкой? Как проверить содержимое (как получить поток данных сохраняемых)
2. Как проверить наличие "*" на экране. Просто звёздочку не ищет так как это означает поиск любого количества символов любых на странице, а если написать "\*" то ругается Java. Вариант с "\\*" тоже не прокатывает
3. Не хочет нажимать на ссылки такого вида <a> Это <br> ссылка</a>, как реализовать?
4. Как проверить что текст помечен красным цветом если в красный окрашен фон ячейки таблицы в которой находится текст. Пробовал искать ячейку по цвету фона через свойства а потом сравнивал внутренний текст с искомым текстом. Не прокатило так как отказывается искать ячейку по свойству bgcolor?
Заранее спасибо за ответы, хотя бы за часть.
2. пробуйте искать по строке "\\\\*"
3. не хочет нажимать или не находит ссылку?
4. займитесь анализом html и css кода. Посмотрите какие свойства применяются к Вашей ячейке, на основании их и делайте проверки.
Пока вот... после публикации кода попробую более точно что-то посоветовать.
Про Тестинг
#4
Отправлено 19 июля 2010 - 11:29
попробуйте посмотреть вот эти темы:1. Приложение выбрасывает окно с предложением загрузить какой нить файл для просмотра (PDF, XML). Как проверить что данное окно высветилось, как согласиться с загрузкой? Как проверить содержимое (как получить поток данных сохраняемых)
Тема 1
Тема 2а как вы проверяете *, приведите кусочек кода?2. Как проверить наличие "*" на экране. Просто звёздочку не ищет так как это означает поиск любого количества символов любых на странице, а если написать "\*" то ругается Java. Вариант с "\\*" тоже не прокатывает
темки сейчас посмотрю, по поводу звёздочки
selenium.isTextPresent("*"); - естественно находит так как ищет всё подряд
selenium.isTextPresent("\*"); - ругается Java
selenium.isTextPresent("\\*"); - говорит что такого символа на странице нет, то-есть возвращает false
#5
Отправлено 19 июля 2010 - 12:39
1. на счет первого, сходу не отвечу, надо подумать...
2. пробуйте искать по строке "\\\\*"
3. не хочет нажимать или не находит ссылку?
4. займитесь анализом html и css кода. Посмотрите какие свойства применяются к Вашей ячейке, на основании их и делайте проверки.
Пока вот... после публикации кода попробую более точно что-то посоветовать.
1. пробую нативные функции
2. поиск по строке "\\\\*" даёт отрицательный результат
3. не находит ссылку
4. анализировал, есть таблица у которой все ячейки кроме одной одинаковые, у той ячейки что отличается стоит свойство bgcolor = "red". Суть теста проверить что текст в ячейке помечен цветом. Пробую выводить System.out.println("Text: " + selenium.getText("xpath=//td[@bgcolor='red']//a"));
получаю ERROR: Element xpath=//td[@bgcolor='red']//a not found
#6
Отправлено 19 июля 2010 - 12:52
темки сейчас посмотрю, по поводу звёздочки
selenium.isTextPresent("*"); - естественно находит так как ищет всё подряд
selenium.isTextPresent("\*"); - ругается Java
selenium.isTextPresent("\\*"); - говорит что такого символа на странице нет, то-есть возвращает false
1. Ну есть предположение, что ищете не в том фрейме. Попробуйте выбрать необходимый фрейм с помощью selenium.selectFrame().
2. Если вы знаете путь до элемента (xpath), в тексте которого содержится *, то можете получить текст с помощью selenium.getText(), а потом поискать с помощью contains или других методов.
4. анализировал, есть таблица у которой все ячейки кроме одной одинаковые, у той ячейки что отличается стоит свойство bgcolor = "red". Суть теста проверить что текст в ячейке помечен цветом. Пробую выводить System.out.println("Text: " + selenium.getText("xpath=//td[@bgcolor='red']//a"));
получаю ERROR: Element xpath=//td[@bgcolor='red']//a not found
Тут надо применять не getText, а getAttribute.
#7
Отправлено 19 июля 2010 - 13:00
1. На странице нет фреймов, страница цельная.1. Ну есть предположение, что ищете не в том фрейме. Попробуйте выбрать необходимый фрейм с помощью selenium.selectFrame().
2. Если вы знаете путь до элемента (xpath), в тексте которого содержится *, то можете получить текст с помощью selenium.getText(), а потом поискать с помощью contains или других методов.
2. Xpath нету до элемента, это просто текст, а точнее лейбл к полю ввода, что то типа "Name *. Тоесть я ищу текст со звёздочкой, таких лейблов несколько и по сему подход к поиску должен быть стандартным, не должно быть жёсткой привязки.
Тут надо применять не getText, а getAttribute.
а вот тут не понял, как я возьму атрибут если конечный узел это тег ссылки?
#8
Отправлено 19 июля 2010 - 13:55
bgcolor - свойство элемента td, по идее его можно получить с помощью getAttributeа вот тут не понял, как я возьму атрибут если конечный узел это тег ссылки?
попробуйте так:
selenium.getAttribute("xpath=//td/@bgcolor");
только увеличьте путь до этого элемента, а то td немеряно на странице, наверное
у меня такая запись работает
хотя вообще-то селениум у вас не значение не отдает, а элемент не находит и для начала надо разобраться почему он его не находит...
#9
Отправлено 19 июля 2010 - 14:33
1. на счет первого, сходу не отвечу, надо подумать...
2. пробуйте искать по строке "\\\\*"
3. не хочет нажимать или не находит ссылку?
4. займитесь анализом html и css кода. Посмотрите какие свойства применяются к Вашей ячейке, на основании их и делайте проверки.
Пока вот... после публикации кода попробую более точно что-то посоветовать.
1. пробую нативные функции
2. поиск по строке "\\\\*" даёт отрицательный результат
3. не находит ссылку
4. анализировал, есть таблица у которой все ячейки кроме одной одинаковые, у той ячейки что отличается стоит свойство bgcolor = "red". Суть теста проверить что текст в ячейке помечен цветом. Пробую выводить System.out.println("Text: " + selenium.getText("xpath=//td[@bgcolor='red']//a"));
получаю ERROR: Element xpath=//td[@bgcolor='red']//a not found
Давайте смотреть :) вот что нашел:
2. По поводу звездочки пробуем: selenium.isTextPresent("exact:*"); Попробовал на нашем тестовом портале - вроде работает :)
3. Попробуйте сначала сделать getText для этой ссылки найдя её через XPATH. Скорее всего <br> трансформируется в нечто на подобии символа перевода строки. Из-за этого вы не можете найти ссылку.
4. Попробуйте без кейворда "xpath=". Вот так: selenium.getText("//td[@bgcolor='red']//a");
и еще, вы уверены, что надо проверять на цвет = red, а не на код этого цвета (255 0 0 или #FF0000)
Про Тестинг
#10
Отправлено 19 июля 2010 - 15:01
Про Тестинг
#11
Отправлено 20 июля 2010 - 05:05
спасибо, у меня так тоже работает, свойство то я получить могу, тока надо указать конкретную ячейку (например присвоив ей какой нить id), но цель то немного другая.bgcolor - свойство элемента td, по идее его можно получить с помощью getAttributeа вот тут не понял, как я возьму атрибут если конечный узел это тег ссылки?
попробуйте так:
selenium.getAttribute("xpath=//td/@bgcolor");
только увеличьте путь до этого элемента, а то td немеряно на странице, наверное
у меня такая запись работает
хотя вообще-то селениум у вас не значение не отдает, а элемент не находит и для начала надо разобраться почему он его не находит...
Надо по цвету ячейки до неё доколебаться и получить из неё текст ссылки что бы сравнить его с тестовым текстом, нам же надо проверить что текст на странице помечен цветом. А до свойства то понятное дело что добраться нет проблем, просто в приложении у ячайки кроме как bgcolor свойства отличительных знаков нет.
#12
Отправлено 20 июля 2010 - 05:07
спасибо, всенепременно попробую все приведённые варианты, цвет естественно указан кодом, это я для простоты указал красный, так он какой то там серобуроказявчатый.1. на счет первого, сходу не отвечу, надо подумать...
2. пробуйте искать по строке "\\\\*"
3. не хочет нажимать или не находит ссылку?
4. займитесь анализом html и css кода. Посмотрите какие свойства применяются к Вашей ячейке, на основании их и делайте проверки.
Пока вот... после публикации кода попробую более точно что-то посоветовать.
1. пробую нативные функции
2. поиск по строке "\\\\*" даёт отрицательный результат
3. не находит ссылку
4. анализировал, есть таблица у которой все ячейки кроме одной одинаковые, у той ячейки что отличается стоит свойство bgcolor = "red". Суть теста проверить что текст в ячейке помечен цветом. Пробую выводить System.out.println("Text: " + selenium.getText("xpath=//td[@bgcolor='red']//a"));
получаю ERROR: Element xpath=//td[@bgcolor='red']//a not found
Давайте смотреть :) вот что нашел:
2. По поводу звездочки пробуем: selenium.isTextPresent("exact:*"); Попробовал на нашем тестовом портале - вроде работает :)
3. Попробуйте сначала сделать getText для этой ссылки найдя её через XPATH. Скорее всего <br> трансформируется в нечто на подобии символа перевода строки. Из-за этого вы не можете найти ссылку.
4. Попробуйте без кейворда "xpath=". Вот так: selenium.getText("//td[@bgcolor='red']//a");
и еще, вы уверены, что надо проверять на цвет = red, а не на код этого цвета (255 0 0 или #FF0000)
Так проверил вариант со звёздочкой вроде как работает, можно вопрос откуда такая информация про звёздочку и её проверку, где читануть?
По поводу поиска ячейки по цвету через xPath не прокатило
#13
Отправлено 20 июля 2010 - 06:08
они и текст вам дадут страничный, и ошибки верстки корректно обработают, удалив тэги
Ну, а потом дело техники найти в тексте какой-то символ или строку. Но это тяжелый вариант, поэтому рекомендую прибегать в самым крайних случаях. Например, если нужно сделать синтаксический анализ - проверить на наличие орфографических ошибок etc...
А для начала разберитесь с XPath
удачи
#14
Отправлено 20 июля 2010 - 07:29
Не поверите, информация из оффициальной документации по Селениум :)Так проверил вариант со звёздочкой вроде как работает, можно вопрос откуда такая информация про звёздочку и её проверку, где читануть?
По поводу поиска ячейки по цвету через xPath не прокатило
http://seleniumhq.or...cumentation.pdf
Про Тестинг
#15
Отправлено 20 июля 2010 - 07:36
спасибо, у меня так тоже работает, свойство то я получить могу, тока надо указать конкретную ячейку (например присвоив ей какой нить id), но цель то немного другая.
Надо по цвету ячейки до неё доколебаться и получить из неё текст ссылки что бы сравнить его с тестовым текстом, нам же надо проверить что текст на странице помечен цветом. А до свойства то понятное дело что добраться нет проблем, просто в приложении у ячайки кроме как bgcolor свойства отличительных знаков нет.
Вот что я подумал :)
А что возвращает команда:
selenium.getXpathCount("//td[@bgcolor='red']");
Если больше 0, то вполне возможно нужно использовать индексы как в массивах в xpath... Попробуйте, может поможет :)
P.S. А вообще для таких ситуаций хорошо было бы видеть ваш HTML код.
Про Тестинг
#16
Отправлено 20 июля 2010 - 08:22
спасибо, у меня так тоже работает, свойство то я получить могу, тока надо указать конкретную ячейку (например присвоив ей какой нить id), но цель то немного другая.
Надо по цвету ячейки до неё доколебаться и получить из неё текст ссылки что бы сравнить его с тестовым текстом, нам же надо проверить что текст на странице помечен цветом. А до свойства то понятное дело что добраться нет проблем, просто в приложении у ячайки кроме как bgcolor свойства отличительных знаков нет.
Вот что я подумал :)
А что возвращает команда:
selenium.getXpathCount("//td[@bgcolor='red']");
Если больше 0, то вполне возможно нужно использовать индексы как в массивах в xpath... Попробуйте, может поможет :)
P.S. А вообще для таких ситуаций хорошо было бы видеть ваш HTML код.
попробовал код selenium.getXpathCount("//td[@bgcolor='red']"); , результат 0 (естественно код цвета мои)
Я не против, выкладываю кусок страшного кода java скрипта
// starting the calendar table... calendarHTML += '<table cellpadding="2" cellspacing="0" border="0" style="border-bottom: 1px solid #fff;"><tr align="right">' // appending day initials for (var i = 0; i < weekdayInits.length; i++) calendarHTML += '<td class="calFont" style="border-bottom: 1px solid #808080;"><small><small>' + weekdayInits[i] + '</small></small><\/td>' calendarHTML += '<tr align="right">' // getting the first day of the month month.setDate(1); var daysToStart = (month.getDay() == 0)? 7 : month.getDay(); // drawing empty cells for (var i = 0; i < daysToStart - 1; i++) calendarHTML += '<td class="calFont"><br /><\/td>'; // drawing the calendar itself for (var i = 1; i < 33; i++) { month.setDate(i); if (month.getMonth() == thisMonth) { if (isThisMonth && currDate.getDate() == i) calendarHTML += '<td class="calFont" style="color: #ffffff;" bgcolor="#ff7f00" ><small><a href="" onClick="setDate(' + i + ', ' + thisMonth + ', ' + thisYear + '); return false;">' + i + '</a></small><\/td>'; else calendarHTML += '<td class="calFont"><small><a href="" onClick="setDate(' + i + ', ' + thisMonth + ', ' + thisYear + '); return false;">' + i + '<\/a></small><\/td>'; } else break; if (month.getDay() == 0) calendarHTML += '<\/tr><tr align="right">'; } // drawing empty cells if any if (month.getDay() != 1) { var finalDay = (month.getDay() == 0)? 7 : month.getDay(); var daysToEnd = 8 - finalDay; for (var i = 0; i < daysToEnd; i++) calendarHTML += '<td class="calFont"><br /><\/td>'; } // tables endsвыделяемый цвет #ff7f00
индексы, если я вас правильно понял, я использовать не могу так как часть кода предстваленного это календарь, у которого выделяется текущаяя дата, откуда следует что она каждый день разная, тоесть ячайка выделяется каждый день разная. Тоесть мы извлекаем текущую дату, достаём число и проверяем что данное число помечено цветом в календаре
#17
Отправлено 20 июля 2010 - 12:08
выделяемый цвет #ff7f00
индексы, если я вас правильно понял, я использовать не могу так как часть кода предстваленного это календарь, у которого выделяется текущаяя дата, откуда следует что она каждый день разная, тоесть ячайка выделяется каждый день разная. Тоесть мы извлекаем текущую дату, достаём число и проверяем что данное число помечено цветом в календаре
А вот и я :)
Решение оказалось элементарным :) это была задача на внимание :)
Сделал свою тестовую страницу:
<html> <body> <table> <td class="calFont" style="border-bottom: 1px solid #808080;"><a href="">123</a></td> <td class="calFont" style="color: #ffffff;" bgcolor="#ff7f00"><a href="">456</a></td> </table> </body> </html>
Далее Напустил на нее Селениум. Выполнил команду selenium.getHtmlSource()
получил следующий код:
<HEAD></HEAD> <BODY> <TABLE> <TBODY> <TR> <TD class=calFont style="BORDER-BOTTOM: #808080 1px solid"><A href="">123</A></TD> <TD class=calFont style="COLOR: #ffffff" bgColor=#ff7f00><A href="">456</A></TD></TR></TBODY></TABLE></BODY>
Найдите 10 отличий :)
- Первое и самое главное, что селением видит элемент bgcolor, как bgColor (большое С, а не маленькое как в первоначальном исходном коде)
Взяв это не вооружение, запускаю команду: selenium.getXpathCount("//td[@bgColor='#ff7f00']") и получаю 1 элемент. :)
Думаю это даст вам начальную точку в решении Вашей проблемы с поискам нужного элемента!
PS можно сказать, что мораль такова: разбирайте страницу используя атрибуты элементов с такими именами, как их видит Selenium, а не с теми, что у вас в исходном коде.
Про Тестинг
#18
Отправлено 20 июля 2010 - 12:34
выделяемый цвет #ff7f00
индексы, если я вас правильно понял, я использовать не могу так как часть кода предстваленного это календарь, у которого выделяется текущаяя дата, откуда следует что она каждый день разная, тоесть ячайка выделяется каждый день разная. Тоесть мы извлекаем текущую дату, достаём число и проверяем что данное число помечено цветом в календаре
А вот и я :)
Решение оказалось элементарным :) это была задача на внимание :)
Сделал свою тестовую страницу:<html> <body> <table> <td class="calFont" style="border-bottom: 1px solid #808080;"><a href="">123</a></td> <td class="calFont" style="color: #ffffff;" bgcolor="#ff7f00"><a href="">456</a></td> </table> </body> </html>
Далее Напустил на нее Селениум. Выполнил команду selenium.getHtmlSource()
получил следующий код:<HEAD></HEAD> <BODY> <TABLE> <TBODY> <TR> <TD class=calFont style="BORDER-BOTTOM: #808080 1px solid"><A href="">123</A></TD> <TD class=calFont style="COLOR: #ffffff" bgColor=#ff7f00><A href="">456</A></TD></TR></TBODY></TABLE></BODY>
Найдите 10 отличий :)
- Первое и самое главное, что селением видит элемент bgcolor, как bgColor (большое С, а не маленькое как в первоначальном исходном коде)
Взяв это не вооружение, запускаю команду: selenium.getXpathCount("//td[@bgColor='#ff7f00']") и получаю 1 элемент. :)
Думаю это даст вам начальную точку в решении Вашей проблемы с поискам нужного элемента!
PS можно сказать, что мораль такова: разбирайте страницу используя атрибуты элементов с такими именами, как их видит Selenium, а не с теми, что у вас в исходном коде.
огромное при огромное спасибо, дали пищу для размышлений, опять же доки по силениуму у меня небыло, пользовался тока Javadocs.
правда я подозревал что свойство не правильно написано и по сему дал ID нужной ячейке и по этому ID тем нименее доставал свойство bgcolor именно так как оно написано (все буковки строчные). Ну да ладно, работает и славно.
Правда пока суть да дело появился один очень важный вопрос, как сделать дистрибутив тестов, как мне видится так что бы всё запускалось двойным кликом по файлу. Ща всё запускаю через Эклипс и ант.
#19
Отправлено 20 июля 2010 - 12:51
выделяемый цвет #ff7f00
индексы, если я вас правильно понял, я использовать не могу так как часть кода предстваленного это календарь, у которого выделяется текущаяя дата, откуда следует что она каждый день разная, тоесть ячайка выделяется каждый день разная. Тоесть мы извлекаем текущую дату, достаём число и проверяем что данное число помечено цветом в календаре
А вот и я :)
Решение оказалось элементарным :) это была задача на внимание :)
Сделал свою тестовую страницу:<html> <body> <table> <td class="calFont" style="border-bottom: 1px solid #808080;"><a href="">123</a></td> <td class="calFont" style="color: #ffffff;" bgcolor="#ff7f00"><a href="">456</a></td> </table> </body> </html>
Далее Напустил на нее Селениум. Выполнил команду selenium.getHtmlSource()
получил следующий код:<HEAD></HEAD> <BODY> <TABLE> <TBODY> <TR> <TD class=calFont style="BORDER-BOTTOM: #808080 1px solid"><A href="">123</A></TD> <TD class=calFont style="COLOR: #ffffff" bgColor=#ff7f00><A href="">456</A></TD></TR></TBODY></TABLE></BODY>
Найдите 10 отличий :)
- Первое и самое главное, что селением видит элемент bgcolor, как bgColor (большое С, а не маленькое как в первоначальном исходном коде)
Взяв это не вооружение, запускаю команду: selenium.getXpathCount("//td[@bgColor='#ff7f00']") и получаю 1 элемент. :)
Думаю это даст вам начальную точку в решении Вашей проблемы с поискам нужного элемента!
PS можно сказать, что мораль такова: разбирайте страницу используя атрибуты элементов с такими именами, как их видит Selenium, а не с теми, что у вас в исходном коде.
огромное при огромное спасибо, дали пищу для размышлений, опять же доки по силениуму у меня небыло, пользовался тока Javadocs.
правда я подозревал что свойство не правильно написано и по сему дал ID нужной ячейке и по этому ID тем нименее доставал свойство bgcolor именно так как оно написано (все буковки строчные). Ну да ладно, работает и славно. Проверил, всё работает и всё достаётся
Правда пока суть да дело появился один очень важный вопрос, как сделать дистрибутив тестов, как мне видится так что бы всё запускалось двойным кликом по файлу. Ща всё запускаю через Эклипс и ант.
#20
Отправлено 20 июля 2010 - 13:05
Ну, раз вы ант знаете, то и проблем быть не может :)Правда пока суть да дело появился один очень важный вопрос, как сделать дистрибутив тестов, как мне видится так что бы всё запускалось двойным кликом по файлу. Ща всё запускаю через Эклипс и ант.
собираете все тесты в jar файл (что-то на подобии)
<target name="compile"> <javac srcdir="${src.dir}:" includes="org/testcase/**" destdir="${build.classes.dir}" debug="on" deprecation="on" optimize="off" > <classpath refid="lib.classpath"/> </javac> </target> <target name="build" depends="compile"> <jar jarfile="${jar.file}" basedir="${build.classes.dir}" includes="**"> </jar> </target>
А дальше запускаете
java -classpath {перечисляете все необходимые jar-ы} org.blah.blahblah.Test
Ну или что-то вроде того :)
Про Тестинг
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных