Selenium2 и Теги
#1
Отправлено 10 октября 2012 - 14:19
количество определенных тегов? К примеру, количество открытых/закрытых div.
И как это можно реализовать.
За ранее всем огромное спасибо.
#2
Отправлено 10 октября 2012 - 14:51
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#3
Отправлено 10 октября 2012 - 14:57
#4
Отправлено 10 октября 2012 - 15:19
#5
Отправлено 10 октября 2012 - 15:32
Driver.FindElements(By.TagName("div").Count;Только все ли из них будут закрыты? Не факт.
Еще можно получить PageSource и как-то парсить его, но не думаю, что это рационально...
#6
Отправлено 11 октября 2012 - 07:45
driver.findElements(By.tagName("div")).size()
Да, данный метод возвращает колчество "открытых" div , но как быть с закрытыми?
#7
Отправлено 11 октября 2012 - 10:20
Да, данный метод возвращает колчество "открытых" div , но как быть с закрытыми?
Он возвращает не "колчество открытых div", а количество элементов "div" v dom-e.
Если у вас валидный документ, то количество открывающих тегов должно ровняться количеству закрывающих. Если документ не валидный - возможны разные ситуации. Для чего вам это вообще нужно? Может вы стоит взять не селениум, а какой-нибудь HTML-Валидатор?
#8
Отправлено 11 октября 2012 - 10:34
Просто объеденяю несколько тестов в одну проверку. И связываю их с jenkins(иду к запуску по плану, с полным отчетом).Для чего вам это вообще нужно?
А запуск валидатора это уже шаг в сторону. Валидатором проверять логично, но хотелось бы упорядоченности и запуска тестирования в одном процессе.
#9
Отправлено 11 октября 2012 - 11:01
#10
Отправлено 11 октября 2012 - 11:13
#11
Отправлено 11 октября 2012 - 11:21
Нет,наверно все таки тегов, так как при лишнем div'e все элементы на странице сохраняются,Просто подозреваю что вам все-таки не количество тегов, надо считать, а количество элементов на странице. В обычных селениум-тестах это так. Так что вам вполне подойдет "банальный" метод.
но при этом верстка страницы расползается полностью.
Пробовал связать это как то с элементами, но единственное что связывает все "поехавшие" страницы -
это меню которое уезжает за видимую область страницы, видимое только при сильном уменьшении масштаба.
#12
Отправлено 11 октября 2012 - 11:23
Проблема в том, что при поиске "/div" webdriver долго думает, а после возвращает "0"хорошо, а в чём проблема искать <div и </div>. Если их количество совпадает - круто, если нет - плохо
#13
Отправлено 11 октября 2012 - 13:19
#14
Отправлено 12 октября 2012 - 05:44
Хорошо.Тогда не подскажите какой способ наименее затратный по времени? getpagesource()?(Но он по-моему тожеВы можете ВебДрайвером скопировать код странички и потом средствами языка анализировать его как я написал выше.
что-то не то возвращает).А каждый раз сохранять при помощи "ctrl+s" как то не вариант.
#15
Отправлено 12 октября 2012 - 06:59
хотя, мне кажется, что проже ПейджСорсРешение "в лоб" - забрать innerHTML у <BODY> и работать с ним.
#16
Отправлено 18 октября 2012 - 07:44
public void TestCase() throws Exception { int i,div=0,nodiv=0; driver.get(url); String html = driver.getPageSource(); driver.quit(); int number = html.length(); for(i=0; i <=number-1 ; i++) { if ( html.charAt(i)=='<') { if (html.charAt(i+1)=='d') { if (html.charAt(i+2)=='i') { if (html.charAt(i+3)=='v') { div++; } } } } else { if ( html.charAt(i)==' ') { if (html.charAt(i+1)=='d') { if (html.charAt(i+2)=='i') { if (html.charAt(i+3)=='v') { if (html.charAt(i+4)==' ') { div++; } else { if (html.charAt(i+4)=='>') { div++; } } } } } } else { if (html.charAt(i)=='/') { if (html.charAt(i+1)=='d') { if (html.charAt(i+2)=='i') { if (html.charAt(i+3)=='v') { nodiv++; } } } } } } } JOptionPane.showMessageDialog(null,"<div>="+div+'\n'+"</div>="+nodiv);
Но все равно закрытых div'ов постоянно находит столько же сколько и открытых.(хотя открытых div больше чем закрытых)
Подскажите , что не так?
#17
Отправлено 18 октября 2012 - 08:05
Команда getPageSource возвращает не исходный код страницы, полученный браузером от веб-сервера, а "дамп текущего состояния дерева DOM". Поэтому там все теги закрыты, это уже не исходный код, а поправленный и проинтерпретированный браузером.
Поэтому если потребовался "настоящий исходный код" -- берите, действительно, innerHTML из body и делайте с ним что хотите.
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#18
Отправлено 18 октября 2012 - 11:57
Самое смешное, что и в этом случае возвращает одинаковое кол-во, хотя закрытых больше.Поэтому если потребовался "настоящий исходный код" -- берите, действительно, innerHTML из body и делайте с ним что хотите.
Мой код:
<html><head> <script> function countDivs() { var i=0; var position=0; var innerhtml=document.body.innerHTML; while(true) { position=innerhtml.indexOf("<div",position); //потом меняем на </div> if(position>=0) { i++; position++; } else break; } alert(i); } </script></head> <body> <div id=1></div> <div> <div> <div id=2></div> </div> <div></div> </div> </div></div> <button onclick="countDivs()">Count</button> </body></html>
UP: innerhtml не возвращает лишние закрывающие теги в FF :(
#19
Отправлено 18 октября 2012 - 12:32
Ну вот видите -- даже на этом этапе браузер уже корректирует ошибки разработчиков, как умеет.UP: innerhtml не возвращает лишние закрывающие теги в FF :(
Поэтому бросьте селениум и настоящие браузеры, возьмите что-нибудь попроще, HtmlUnit, например.
Или перехватывайте трафик прокси-сервером и анализируйте то, что наперехватывали.
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#20
Отправлено 23 октября 2012 - 09:43
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных