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

Фотография

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


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

#1 TestTime

TestTime

    Новый участник

  • Members
  • Pip
  • 21 сообщений
  • ФИО:Степанов Сергей

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

Всем доброго времени суток!

 

Когда искал работу, в компании http://www.ufs-online.ru/ мне предложили сделать автотест, работу к тому моменту я уже нашел, но ради интереса решил попробовать.

 

Автотест надо было сделать в разделе "авиабилеты" , меня удивили выпадающие списки . Выпадающие определялись рекодером не как "Selector", а элементы. И справа от города "Откуда" и "Куда" можно выбрать даты вылета\прилета, посоветуйте как лучше их выбирать создать массив и оттуда тянуть перебирая доступные доступные?


  • 0

#2 vmaximv

vmaximv

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

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

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

Ничего удивительного в этих DDL лично я не увидел. Выбирать так же, как и ручками - тайп/клик.

В 90% случаев ветвления/массивы/циклы в UI-автотестах говорят о невысоком уровне тестописателя.


  • 0

#3 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


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

Ничего удивительного в этих DDL лично я не увидел. Выбирать так же, как и ручками - тайп/клик.

В 90% случаев ветвления/массивы/циклы в UI-автотестах говорят о невысоком уровне тестописателя.

Не понял, в вашей практике все тесты прямолинейны?

И элементы на страничке все уникальны?

И не приходилось ни разу что-либо повторять?

Везунчик.


  • 0

#4 vmaximv

vmaximv

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

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

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

Не понял, в вашей практике все тесты прямолинейны?

И элементы на страничке все уникальны?

И не приходилось ни разу что-либо повторять?

Везунчик.

 

1. Если тест-кейс нелинеен (не важно какой он: мануальный или авто) - это не очень хороший тест-кейс. Вам доводилось видеть степы с ветвлениями в мануальных кейсах? Мне лично нет.

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

3. Не совсем понял. Про 100% я не говорил, намерено оставляя 10% "про запас" - работа с таблицами, дата провайдерами и т.д.


  • 0

#5 appmen

appmen

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

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

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

я понимаю, что вопрос звучит странно, но что такое линейгые и нелинейные тест кейсы?


  • 0

#6 elvis

elvis

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

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


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

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

 

не стоит так однозначно судить. Быввают случаи, когда для того чтобы тест был универсальным, приходится писать и цикл и массив даже не один. В тесте это конечно делать не стоит, для этого есть Page Objects.


  • 0

#7 BadMF

BadMF

    Специалист

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

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

 

Ничего удивительного в этих DDL лично я не увидел. Выбирать так же, как и ручками - тайп/клик.

В 90% случаев ветвления/массивы/циклы в UI-автотестах говорят о невысоком уровне тестописателя.

Не понял, в вашей практике все тесты прямолинейны?

И элементы на страничке все уникальны?

И не приходилось ни разу что-либо повторять?

Везунчик.

 

Все UI-автотесты линейны, они не могут быть нелинейными. Нелинейными могут быть только наборы тест кейсов, например, когда после 4-ого тест кейса может идти ветвление на 5.1 и 5.2 тест кейсы.

Если в одном UI тест кейсе существует ветвление, это недостаточная дискретизация.


  • 0

#8 vmaximv

vmaximv

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

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

Отправлено 12 марта 2014 - 05:39

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

 

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

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


  • 0

#9 Master_lomaster

Master_lomaster

    Новый участник

  • Members
  • Pip
  • 50 сообщений

Отправлено 12 марта 2014 - 06:30

Ничего удивительного в этих DDL лично я не увидел. Выбирать так же, как и ручками - тайп/клик.

В 90% случаев ветвления/массивы/циклы в UI-автотестах говорят о невысоком уровне тестописателя.

То есть, вы хотите сказать, что если, например, нужно добавить в корзину двадцать разных товаров с одной страницы, то написание отдельного локатора для каждого элемента будет говорить о высоком уровне тестировщика?


  • 1

#10 elvis

elvis

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

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


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

 

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

 

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

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

 

Конкретно сорс дать не могу, но вот недавно был случай. Список заседаний комиссии. Cодержимое страницы меняется в зависимости от бизнес логики. Нужно проверить, что неделя начинается с такого-то числа, а заканчивается таким-то. Список дней с числами отображается в заголовках h2. Но, кроме того, на странице могут присутствовать и другие h2 заголовки, например инфо блок до списка дней недели. div'ы с днями недель и числами имеют название класса "title clear table-title". Всё бы замечательно - загоняем все h2 в список элементов и проверяем содержимое первого и последнего - ан нет. Ведь количество таких тегов и содержимое зависит от бизнес логики, которую предсказать сложно. Может загнать все div'ы с подходящим названием класса в список? Но есть ещё куча других div'ов c точно таким же названием класса, где содержится совершенно ненужная нам информация, и в них нет нужных нам тегов h2. Постановка задачи получается следующей - найдём все div'ы с названием класса "title clear table-title", в которых содержатся заголовки h2. Затем вытащим все заголовки h2 и сможем проверить содержимое первого и последнего. Как бы вы решили такую проблему?


  • 0

#11 vmaximv

vmaximv

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

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

Отправлено 12 марта 2014 - 08:46

В данном случае искомые элементы определяются локатором //div[@class='title clear table-title' and .//h2]. 

А итерации среди них идут не для отсева кандидатов, а для верификации по //h2[1] и //h2[last()].

 

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

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

 

То же касается примера от Master_lomaster: если нужно добавить 20 товаров, то их либо нужно сначала добавить, либо вытащить из базы. Т.е. их список до момента добавления должен быть однозначно определен. Таким образом итерации идут исключительно для взаимодействия с элементами.

 

 

Но количество тестов, в которых нужно манипулировать группами объектов, как правило очень мало, и вполне вмещается в оставшиеся 10%.


  • 0

#12 barancev

barancev

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

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


Отправлено 12 марта 2014 - 08:51


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

 

А почему, собственно, нельзя?

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


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#13 barancev

barancev

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

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


Отправлено 12 марта 2014 - 08:57


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

 

Кстати, такие "локаторы с итерацией" присутствуют даже в самом Selenium, хотя это и не заметно снаружи.

 

Например, By.linkText (поиск ссылки с заданным текстом) работает так: сначала на странице находятся все элементы с тегом <a>, после чего итерируем по всем элементам и сравниваем текст с желаемым.

 

Второй пример -- выбор пункта из выпадающего меню методом selectByVisibleText -- аналогично, сначала получаем полный список, после чего проходим по всем и проверяем текст.


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#14 elvis

elvis

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

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


Отправлено 12 марта 2014 - 09:51

В данном случае искомые элементы определяются локатором //div[@class='title clear table-title' and .//h2]. 

А итерации среди них идут не для отсева кандидатов, а для верификации по //h2[1] и //h2[last()].

Не совсем понял последнее предложение. Я решил похожим образом, но потом просто вытаскивал 

 

String start = divs.get(0).findElement(By.tagName("h2")).getText();

String end = divs.get(divs.size()-1).findElement(By.tagName("h2")).getText();


  • 0

#15 vmaximv

vmaximv

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

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

Отправлено 12 марта 2014 - 10:03

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

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

 

Например, By.linkText , selectByVisibleText 

 

Если Вы про http://code.google.c...rs/link_text.js - то там эта мера связана исключительно с выбором css, использование xpath сняло бы это ограничение. 

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


  • 0

#16 vmaximv

vmaximv

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

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

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

Не совсем понял последнее предложение. Я решил похожим образом, но потом просто вытаскивал 
 
String start = divs.get(0).findElement(By.tagName("h2")).getText();
String end = divs.get(divs.size()-1).findElement(By.tagName("h2")).getText();

Значит я не понял вашу задачу. Если "дословно" перевести код, что получится что-то типа:




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

#17 leipreachan

leipreachan

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

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

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

 

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

 

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

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

 

 

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

 

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


  • 0

#18 leipreachan

leipreachan

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

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

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

 

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

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

 

 

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


  • 0

#19 barancev

barancev

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

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


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


Если Вы про http://code.google.c...rs/link_text.js - то там эта мера связана исключительно с выбором css, использование xpath сняло бы это ограничение. 

 

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

 

Есть и ещё один нюанс -- Internet Explorer и мобильные браузеры от Microsoft. Поддержка XPath в IE оставляет желать лучшего, а в мобильных MS-браузерах её, похоже, нет и не будет вообще.


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#20 vmaximv

vmaximv

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

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

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

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

 

 

 

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

 

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

 

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

 

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

 

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


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

  • 0


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

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