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

Публикации leipreachan

94 публикаций создано leipreachan (учитываются публикации только с 29 апреля 2023)



#128149 Тестовое задание на собеседование ufs-online.ru

Отправлено автор: leipreachan 12 марта 2014 - 14:44 в Selenium - Functional Testing

 

В топике речь о функциональном UI тестировании, поэтому fuzzy "за бортом".

 

 

 

А можно пример, когда нельзя однозначно определить элемент по локатору, а итерации среди кандидатов могут?

 

Я могу привести пример. A/B тестирование, например.

 

Если вы не можете повлиять на то, в какую фокус-группу попадает ваш тестовый пользователь, то вам нужно добавлять ветвление в тест (тесткейс / зависимый тест / или как вы их там группируете).

 

Вы наверное не то сообщение процитировали, так как вопрос про итерации, а ответ про ветвление. 

 

В случае А/В безусловно будут иметь место всяческие ухищрения (альтернативные локаторы/сценарии) - много чего можно наворотить, но не в виде


public void test(){
  if (element1.exist()){
   button1.click();
}else{
   button2.click()
}
}

 

вроде бы, то процитировал, что хотел.

 

1) Простите, но итерации без условия - вечный цикл.

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

Вы можете сказать: "хха, тут нужно использовать датапровайдеры!", на что я вам отвечу: "хха, датапровайдеры не всегда можно использовать, если добрать до какого-нибудь раздела занимает, например, 40 секунд (тестом), а прокликать все варианты цен - десять.

Вы (я предполагаю, что вы так предложите), заявите: ну и что. Я их распараллелю и все тесты будут проходить в 45 секунд, просто в пять потоков. А я вам отвечу: а что если задача сложнее? если я не могу параллелить именно этот тест? Например, потому, что именно при переключении с одного периода подписки на другой уже неоднократно находили ошибку?

 

Мне кажется, вы слишком категорично говорите о том, что "нельзя использовать циклы и условия!!"

 

а тот тест, который вы привели - да, это глупо. Но если залезть дальше такого примитивного теста (например, в интеграционные тесты) - там не обойтись без условий.




#128129 Тестовое задание на собеседование ufs-online.ru

Отправлено автор: leipreachan 12 марта 2014 - 11:14 в Selenium - Functional Testing

 

А почему, собственно, нельзя?
"Ввести любое значение из такого-то класса эквивалентности" -- уж так-то точно можно делать.

В теории и в примитивных случаях, либо в случаях когда нужна рандомизация - можно ("Введите имя пользователя из 8 букв").В остальных случаях вся эта не детерминированность кроме проблем "У меня все работает!" и т.д. никакой пользы не несет => вредна.

 

 

Раз вы настолько критичны, я вам предложу почитать про fuzzy testing. Автоматизация в этой методологии очень помогает.




#128183 Тестовое задание на собеседование ufs-online.ru

Отправлено автор: leipreachan 13 марта 2014 - 07:38 в Selenium - Functional Testing

 

 

 

а тот тест, который вы привели - да, это глупо. Но если залезть дальше такого примитивного теста (например, в интеграционные тесты) - там не обойтись без условий.

 

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

 

 

Очень рад, что ваш стиль программирования не допускает наличия цикла или условия.

 

Кажется, вы мне пытаетесь доказать, что тесткейс не должен содержать ветвления, а что уж у него в API творится (в page objects или что вы там используете) - это к тесту не имеет отношения?

 

Право, мне интересно, если вы описываете интерфейс страницы, в которой есть обязательные элементы, то, например, метод validateMandatoryElements() у вас будет просто перечислением десяти элементов? Прямо вот в так вот:

selenium.isElementPresent('someElement1');
selenium.isElementPresent('someElement2');
selenium.isElementPresent('someElement3');
selenium.isElementPresent('someElement4');

?




#128270 Тестовое задание на собеседование ufs-online.ru

Отправлено автор: leipreachan 14 марта 2014 - 11:11 в Selenium - Functional Testing

 

Вы путаете понятия условный переход и ветвление. В цикле ветвления нет - есть условный переход.
Если вы покажите как организовать цикл в Java используя только последовательное выполнение команд и ветвление - я буду аплодировать сам стоя.

 

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

 

 

Ну как бы есть goto, который, хоть и считается плохим тоном, но всё равно существует почти во всех языках.

 

Или я вас совсем перестал понимать

 

 

 

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

А как можно использовать повторно атомарное действие специфичное только для данного теста?

 

всё зависит от тестового плана. возможно, это не специфичное действие.

 

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




#128277 Тестовое задание на собеседование ufs-online.ru

Отправлено автор: leipreachan 14 марта 2014 - 12:44 в Selenium - Functional Testing

"Ядро фреймворка" - это собственный четырех-колёсный "велосипед", который есть практически у каждого :)

Тест - это код, который представляет из себя последовательность шагов и проверок, и не важно насколько эта последовательность децентрализована.

я, почему-то, и так был уверен, что вы говорите именно о testcase.

 

лично моя точка зрения, что "везде можно обойтись без условий и циклов" - вот это утверждние категоричнее некуда. и с ним я не согласен.

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




#128273 Тестовое задание на собеседование ufs-online.ru

Отправлено автор: leipreachan 14 марта 2014 - 11:54 в Selenium - Functional Testing

Вопрос был про Java - в ней нет оператора безусловного перехода
 

 

упустил, что вы говорили только о Java.

 

 

Я не совсем понимаю, что вы имеете ввиду под словом "логика". Всяческие сложные конструкции имеют место быть в ядре фреймворка, но это не относится ни к AUT ни к тестам. Если под "логикой" вы имеете ввиду моделирование поведения AUT - то это должны делать непосредственно сами тесты.

 

 

под логикой я понимаю бизнес-логику.

тогда я не понимаю, что вы имеете в виду под "ядром фреймворка"?!

Selenium?

что такое тест? метод?




#128128 Тестовое задание на собеседование ufs-online.ru

Отправлено автор: leipreachan 12 марта 2014 - 11:13 в Selenium - Functional Testing

 

>> 2. Нет. Но есть xpath/css. Перебирать элементы в цикле, что бы вытащить какой либо аттрибут или текст, или их комбинацию - это ересь.

 

не стоит так однозначно судить. Быввают случаи...

А можно пример, когда нельзя однозначно определить элемент по локатору, а итерации среди кандидатов могут?

 

 

Я могу привести пример. A/B тестирование, например.

 

Если вы не можете повлиять на то, в какую фокус-группу попадает ваш тестовый пользователь, то вам нужно добавлять ветвление в тест (тесткейс / зависимый тест / или как вы их там группируете).




#128187 Тестовое задание на собеседование ufs-online.ru

Отправлено автор: leipreachan 13 марта 2014 - 07:58 в Selenium - Functional Testing

 

1) Простите, но итерации без условия - вечный цикл.

Давайте говорить в рамках терминологии http://ru.wikipedia....рограммирование

 

Давайте. Вы сказали об "итерации". Приведите тогда определение итерации, в вики есть "цикл".

 

Мы точно об одном и том же говорим? Цикл почти везде можно реализовать через for(), while() и do{}while(). Каждый из этих циклов суть есть действия, которые повторяются до достижения какого-то условия. Не прямое IF, но, тем не менее, условие.

 

 


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

Опять не удачный пример - вполне себе нормальный тест:
1. Выберете журнал ХХХ
2. Проверьте что у данного журнала существуют подписки на месяц, полгода, года, десять лет
3. Нажмите на подписку на месяц
4. Проверьте что цена посчиталась правильно
5. Нажмите на подписку на полгода
6. Проверьте что цена посчиталась правильно
7. Нажмите на подписку на год
8. Проверьте что цена посчиталась правильно
9. Нажмите на подписку на десять лет
10. Проверьте что цена посчиталась правильно

Вполне себе ТК на 5 степов (остальные это верифаи). Городить тут циклы/хешмэпы/массивы/дата_провайдеры просто не к чему. Вы скажите, а если бы вариантов подписки было over 9000+? Тут классы эквивалентности в помощь, т.к. у этих over 9000+ верифаев КПД будет околонулевой.

 

Я понял, о чём вы говорите. Если честно, мне не кажется, что ваш подход к написанию тестов .. мм.. удобный. Получается, что если в вашем коде 300 тестов и они все примерно такого типа, то это очень большая масса кода, который не используется повторно.

Вообще, это уже становится похоже на спор "функциональное программирование vs ООП".

 

Если вы и правда сильно разделяете требования к коду тестов и page objects.. ну ок, что.

Для справки: в моих 300+ тестах на биллинг (т.е. интеграции с paypal, adyen, globalcollect, googlewallet и т.п.) 0 "for", 25 "if", 0 "findElements", но я, тем не менее, считаю, что ваше утверждение про 90% черезчур категоричным.




#127207 Запуска Selenium'a из сайта или есть готовые framework?

Отправлено автор: leipreachan 18 февраля 2014 - 13:24 в Selenium - Functional Testing

Для нашей команды в teamcity я настроил билды с возможностью указание группы тестов (указывается в аннотации). Так получается более гибко, чем VisualPHPUnit. Последний подходит в том случае, если команда оч. небольшая и нет вероятности, что кто-то забьёт селениум-ферму.  К тому же, отсутствуют стандартные плюшки всех CI-серверов (статистика и т.п.)




#126960 Запуска Selenium'a из сайта или есть готовые framework?

Отправлено автор: leipreachan 13 февраля 2014 - 10:29 в Selenium - Functional Testing

Sauce Labsи Nerrvana - по функциональности подобное им, но чтобы я мог установить на свой хост

 

Вам для этого ещё свою серверную стойку надо будет завести.




#126954 Запуска Selenium'a из сайта или есть готовые framework?

Отправлено автор: leipreachan 13 февраля 2014 - 08:03 в Selenium - Functional Testing

Мне для php. Просто сайт-оболочка в котором будет выводиться, который могу запускать с этого сайта

Он для любого языка

ищите по ключевым словам Continious Integration server

их много - teamcity, jenkins, hudson, travis и другие.

 

 

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

 

вот, например, "на почитать"

http://www.browserst...ous-integration




#126983 Запуска Selenium'a из сайта или есть готовые framework?

Отправлено автор: leipreachan 13 февраля 2014 - 13:33 в Selenium - Functional Testing

 

 

Мне для php. Просто сайт-оболочка в котором будет выводиться, который могу запускать с этого сайта


 

 

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


 

Дайте,пожалйста, ссылку на сие творение ?

 

 

еле нашёл о нем упоминание

 

http://www.methodsan...ols.php?bromine

 

 

(искать тут http://web.archive.o...q.org/projects)

 

вообще, потом, похоже, его идеи фукидид (thucydides) перехватил.




#127124 Запуска Selenium'a из сайта или есть готовые framework?

Отправлено автор: leipreachan 17 февраля 2014 - 07:49 в Selenium - Functional Testing

Так это виртуалки. А где дистрибы ?

Уважаемый, это уже вам следует искать в google.com




#128908 Выбор из выпадающего списка

Отправлено автор: leipreachan 01 апреля 2014 - 15:02 в Selenium - Functional Testing

Абсолютно не очевидно - как и ваш ответ с соседней теме.
Покажите разницу между (//select[@id='country']/option)[1] и //select[@id='country']/option[1].
Могу подсказать что эти варианты отличаются как минимум производительностью, а первый вариант имеет достаточно "подводных камней".

 

оператор [] в xpath имеет больший приоритет, чем //

ваше выражение возвращает массив из N элементов и выбирает все опции, которые являются первым потомком select. Т.е., опять же все :)

 

Пояснение есть, например, тут: http://stackoverflow...text-with-xpath

 

Ну, и в конце концов, проверьте.

Далеко ходить не надо - проверьте, какой элемент на этом топике //h3[2], а какой (//h3)[2]

Выражение Виталия выбирает все опции в массив, а из них уже получает первое




#128931 Выбор из выпадающего списка

Отправлено автор: leipreachan 02 апреля 2014 - 08:54 в Selenium - Functional Testing

Парни, я прекрасно знаю что такое предикаты, node-sets, context и т.д. И вполне себе понимаю разницу между (//h3)[2] и //h3[2].

По производительности: давайте я "откомпилирую" эти выражения
1. //select[@id='country']/option[1] - браузер серчит DOM с начала, находит <select id='country'>, берет первый чайлд <option>, применяет к нему предикат [position()=1], получает тру => искомый элемент найдет => коней
2. (//select[@id='country']/option)[1] - браузер серчит DOM с начала, находит <select id='country'>, собирает *всех* чайлдов <option> (которые нам абсолютно не нужны), и идет гулять дальше по DOM выискивая новых кандидатов.
Какой вариант будет быстрее? Подсказка - select с 100К опциями во втором варианте отправил Opera'у в нокаут минут на 20.

По "счастливому стечению обстоятельств" и стабильности:
//select[@id='country']/option[1] - я точно знаю, что ищу: опцию в селекте, которая является первым чайлдом.
1. Если у селекта первый чайлд не option (optgroup во внимание не берем) - это баг => тест должен упасть.
2. Если имеет место быть



<select id='county'>
  <option>1</option>
</select>
<select id='county'>
  <option>3</option>
</select>
То //select/option[2] приведет к вполне ожидаемому фейлу, при(//select[@id='county')[2] выберет первое значение второго селекта, что не совсем ответствует ожиданиям.

 

 

у вас html с проблемкой: два элемента с одинаковым id. Вас это не смущает?




#128938 Выбор из выпадающего списка

Отправлено автор: leipreachan 02 апреля 2014 - 11:16 в Selenium - Functional Testing

Нет. Мопед не мой - это дэвы. Если вас это смущает - замените id на name например - это сути не меняет.

я бы багу влепил за такой HTML. Так делать нельзя (раз)

 

Расширим пример до:

<select id='county'>
  <option>1</option>
  <option>2</option>
</select>
<select id='county'>
  <option>3</option>
  <option>4</option>
</select>

вы ведь в курсе, что //select/option[2] выберет два элемента?

Полагаю, топикстартеру важнее выбрать, всё-таки, ОДИН элемент




#128944 Выбор из выпадающего списка

Отправлено автор: leipreachan 02 апреля 2014 - 13:46 в Selenium - Functional Testing

 

Протестировал оба варианта на FF 28.0, среднее время поиска локатора составило 25 мс в обоих случаях (30 опытов на 100000 option'ах).

Вы правы - мой фейл. Время во всех браузерах примерно одинаковое. Только одна опера (12.16) честно пытается создать сет нодов и падает по таймауту через WD+OperaDriver, либо виснет очень надолго, если ручками через dragonfly.

В общем так я от вас и не услышал, почему имея такой сорс





<body>
  <select>
    <option>a</option>
    <option>b</option>
  </select>
</body>

правильнее писать (//select/option)[1], а не //select/option[1]? При том, что наличие у select других чайлдов, отличных от option - это хак,баг и провокация. А при использовании сета есть вероятность "влететь" в совершенно другой селект.

 

в случае вашего примера - всё одинаково

 

По поводу хаков-багов-провокаций: в select можно запихнуть, например, <input type=hidden/>. Это вообще никак не скажется на вёрстке. А вот на отправке формы - может сказаться.




#128803 Headless запуск Selenium WebDriver

Отправлено автор: leipreachan 31 марта 2014 - 08:56 в Selenium - Functional Testing

Вопрос наивный, но всё же:

 

C:/phantomjs-1.9.7-windows/phantomjs.exe

 

по этому пути у вас драйвер запускается?




#128725 Headless запуск Selenium WebDriver

Отправлено автор: leipreachan 27 марта 2014 - 07:45 в Selenium - Functional Testing

у вас всё выпытывать?=)

 

как запускаете? ошибку?




#128599 Headless запуск Selenium WebDriver

Отправлено автор: leipreachan 25 марта 2014 - 08:02 в Selenium - Functional Testing

Фантом штука интересная, но если сложный ajax на странице и вёрстка не очень простая, то там оооочень много возни может быть.

Например, в хроме и firefox (и в IE) все тесты работают, а в фантоме какой-нибудь клик ничего не делает.

И сиди там, дебажь.. =(




#128708 Headless запуск Selenium WebDriver

Отправлено автор: leipreachan 26 марта 2014 - 15:16 в Selenium - Functional Testing

Провозился сегодня полдня с фантомJS. В итоге ошибку(org.openqa.selenium.remote.unreachablebrowserexception) обойти не удалось. 
Может кто-нибудь более популярно объяснить как его прикрутить к селениуму?
Нашел такую статейку (http://www.appneta.c...d-testing-java/). Вроде бы все популярно расписано, но делаю все так же, а ошибки сыпятся и сыпятся(

 

у вас именно запуск не работает или на этапе теста падает?




#128687 Headless запуск Selenium WebDriver

Отправлено автор: leipreachan 26 марта 2014 - 09:01 в Selenium - Functional Testing

Т.е. на самом деле встречали такую ситуацию когда WebKit'овый браузер (та же версия движка) отрабатывает без проблем, а PhantomJS не фурычит?

 

Смотря что считать "другим webkit-овым" браузером. Хром? Да, он спокойно отрабатывает. Сафари пробовали (но не на регулярной основе) - тоже работает




#124893 Selenium не находит локаторы

Отправлено автор: leipreachan 09 декабря 2013 - 15:09 в Selenium - Functional Testing

Спасибо друзья за помощь.Заработало... :clapping:/>
Версию фаерфокса оставил последнию (25.0.1), а вот версию WebDrivera пришлось понизить до 2.31.
Использовал FirefoxDriver , так как HtmlUnitDriver не заработал...Следовательно вопрос - для чего он нужен?

для страниц без множества ajax. Статику с его помощью легко и быстро можно проверять



#126489 Basic Authentication Window + WebDriver + Thucidides

Отправлено автор: leipreachan 03 февраля 2014 - 09:50 в Selenium - Functional Testing

для решения подобных проблем есть BrowserMobProxy




#126511 Basic Authentication Window + WebDriver + Thucidides

Отправлено автор: leipreachan 03 февраля 2014 - 15:23 в Selenium - Functional Testing

и к тому же,в моем случае,как я понял, необходимо:When you set a proxy for any given driver, it is set only at the time WebDriver session is created; it cannot be changed at runtime. Even if you get the capabilities of the created session, you won't be able to change it. So the answer is, no, you must start a new session if you want to use different proxy settings.

 

поскольку у меня и url,pass and login различные

 

а мне надо,чтобы ,после нажатия на клик,просто открывалась нужная страница, буду признателенза пример или совет

 

спасибо

 

эм.. так инициализируйте два объекта BrowserMob. Первый для одной страницы, второй - для другой.