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

Фотография

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


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

#21 elvis

elvis

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

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 12 марта 2014 - 14:34

String start = driver.findElement(By.xpath("(//div[@class='title clear table-title' and .//h2])[1]//h2")).getText();
String end = driver.findElement(By.xpath("(//div[@class='title clear table-title' and .//h2])[last()]//h2")).getText();

Говорить более предметно можно только при наличии примера сорса.

 

 

можно и так, но в данном случае выражение становится довольно громоздким (более того могут быть дополнительные условия, которые ещё более усложнят выражение). Так что не вижу ничего страшного в том, чтобы загнать все дивы в массив и вытащить текст моим способом.


  • 0

#22 leipreachan

leipreachan

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

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

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

 

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

 

 

 

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

 

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

 

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

 

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

 

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


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

 

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

 

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

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

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

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

 

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

 

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


  • 0

#23 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 13 марта 2014 - 05:35

 

 

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

 

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


  • 0

#24 vmaximv

vmaximv

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

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

Отправлено 13 марта 2014 - 06:54

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

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

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

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

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

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

Где вы категоричность увидели - специально оставил 10%, но никто их в упор не видит.
 
Вот просмотрел сорсы "молодого" проекта - кол-во ТК около 300.
for/while:
0 - в тестах
Несколько в page objects - исключительно для удобства, типа



public void addRecipients(String... groups) {
  for (String group : groups) {
    checkbox(group).check();
  }
}

И всего лишь пара действительно необходимых - работа с таблицами: поиск по нескольким колонкам, проверка сортировки и т.д.

if/switch имеют место быть лишь для сокращения ненужных действий (не кликать на чекбокс, если он уже чекнут), моделирования действий (куда кликать спинер - вверх или вниз), воркэраунды для различных браузеров и т.д. - но их объем в общем коде пренебрежительно мал.
 
findElementS - 0 в тестах, 0 в page objects.


  • 1

#25 leipreachan

leipreachan

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

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

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

 

 

 

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

 

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

 

 

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

 

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

 

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

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

?


  • 0

#26 leipreachan

leipreachan

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

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

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

 

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% черезчур категоричным.


  • 0

#27 vmaximv

vmaximv

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

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

Отправлено 14 марта 2014 - 06:39

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

 

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

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

MagazinePage mag = mainPage.selectMagazine("Правда");
mag.selectSubscription("1 месяц");
mag.verifyPrice("100");
mag.selectSubscription("6 месяцев");
mag.verifyPrice("600");
mag.selectSubscription("1 год");
mag.verifyPrice("1200");
mag.selectSubscription("10 лет");
mag.verifyPrice("12000");

  • 0

#28 neman

neman

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

  • Members
  • PipPip
  • 142 сообщений
  • ФИО:Антон


Отправлено 14 марта 2014 - 07:12

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

 

Рекурсивный вызов функции с условием выхода по if, очевидно же.

 

Мимопробегал.


  • 0

#29 vmaximv

vmaximv

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

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

Отправлено 14 марта 2014 - 07:22

Фейл. http://docs.oracle.c...rflowError.html


  • 0

#30 neman

neman

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

  • Members
  • PipPip
  • 142 сообщений
  • ФИО:Антон


Отправлено 14 марта 2014 - 09:37

public class Infinity{
     
     public static void main(String []args){
        func();
     }
     
     public static void func() {
           try {
            System.out.println("func");
            func();
        } finally {
            func();
        }
     }   
}

  • 0

#31 vmaximv

vmaximv

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

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

Отправлено 14 марта 2014 - 10:00

Могу уменьшить до 880.


  • 0

#32 leipreachan

leipreachan

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

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

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

 

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

 

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

 

 

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

 

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

 

 

 

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

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

 

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

 

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


  • 0

#33 vmaximv

vmaximv

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

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

Отправлено 14 марта 2014 - 11:48

 

Ну как бы есть goto

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

 

вы вводите такие строгие критерии исключительно к тестам? А обёртка вокруг них уже может быть начинена логикой?

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


  • 0

#34 leipreachan

leipreachan

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

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

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

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

 

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

 

 

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

 

 

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

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

Selenium?

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


  • 0

#35 vmaximv

vmaximv

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

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

Отправлено 14 марта 2014 - 12:37

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

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


  • 0

#36 leipreachan

leipreachan

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

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

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

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

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

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

 

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

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


  • 0

#37 vmaximv

vmaximv

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

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

Отправлено 14 марта 2014 - 12:49




public class Infinity{

А зачем нам бесконечный цикл? Нам нужно "от сих - до сих".


  • 0

#38 vmaximv

vmaximv

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

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

Отправлено 14 марта 2014 - 13:08

 

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

Аллилуйа! 


  • 0

#39 neman

neman

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

  • Members
  • PipPip
  • 142 сообщений
  • ФИО:Антон


Отправлено 15 марта 2014 - 18:30

А зачем нам бесконечный цикл? Нам нужно "от сих - до сих".

 

Фейспалм. А вставить в функцию проверку по if это конечно rocket science, это не каждому дано. Ладно, шутка затянулась, больше не хочу эту тему развивать.


  • 0


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

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