Автоматизация результатов поиска со всеми элементами в результате с определенным цветом

У меня есть сценарий поиска для сайта по продаже одежды.

Использование Specflow Framework (C#) и Selenium.

Мне нужно автоматизировать виджет поиска и его результаты.

1) Виджет поиска дает результаты разных типов: название предмета, частичный текст, тип одежды

2) Кроме того, он дает результат по цвету продукта, т. Е. Если продукт имеет определенный доступный цвет, он даст мне результат.

EG: Если бы я набрал "синий" в поисковом поиске, это дало бы мне все продукты / предметы, которые имеют синий цвет внутри или, скажем, доступны.

3) Проблема в том, что цвет доступен только на странице сведений о продукте, а не на странице поиска продукта. Страница поиска продукта дает вам только чистый результат продуктов в виде списка, где есть изображение продукта, название продукта, цена и т. Д.

4) Как автоматизировать такой сценарий, чтобы я проверял, что все перечисленные продукты имеют этот специфический атрибут или, скажем, синий цвет, не заходя на страницу с описанием товара.

3 ответа

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

When i enter "blue" it should return me back all the items/clothes which is blue

Для меня это означает, что вы тестируете множество различных частей вашей системы с помощью теста приемочного уровня, который охватывает

  • подключение к базе данных / авторизация
  • построение запроса
  • десериализация результатов / преобразование модели в видимую форму (ViewModel)
  • построение списка / эскиза в пользовательском интерфейсе

Также вы использовали слово all в вашем сценарии, так что это означает, что нам нужно на самом деле проверить две вещи

  • Все возвращенные результаты включают синий цвет и
  • Для синих нет никаких дополнительных результатов, которые не были возвращены

Все полученные результаты включают синий цвет

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

select * from Items
where tags like '%blue%'
or description like '%blue%

public void IsBlue(Item item)
{
  return item.Tags.Contains("blue") || item.Description.Contains("blue");
}

Когда ваш код меняется, вы должны продолжать переписывать свои тесты, чтобы они прошли успешно.

К сожалению, единственный способ надежно проверить, что пользователь видит что-то синее, - это показать то, что он увидит. Если ваш список / эскиз не имеет синего цвета, вам нужно перейти на страницу сведений и проверить это. То, что вы действительно хотите, это что-то простое, как

IsTrue(DetailsPage.Html.ToString().Contains("blue", CaseInsensitive));

Для синих нет никаких дополнительных результатов, которые не были возвращены

В некоторых отношениях это еще сложнее достичь. Еще раз мы могли бы повторить запрос, но это приводит к

if (GetAllBlueThingsFromDb() == GetAllBlueThingsFromDb()) ....

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

public const int NumberOfBlueThingsInTestDb = 42;
if (GetAllBlueThingsFromDb() == NumberOfBlueThingsInTestDb) ....

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

//Locator is a custom class created with methods such as hasClass, getElement
//Instead of an Element you should consider using something like a 
//List<WebElement> that returns list of elements.


 public boolean hasClass(String className) {

     return webElement  != null && 
                        ((WebElement) webElement).getAttribute("class").contains(className);
 }

 Locator locator = Locator.by(by);

 if(locator.hasClass("colorBlue")) {
     Assert.assertTrue;
 } else {
    Assert.Fail( "No Items with color");
 }

Надеюсь это поможет

Ваш единственный вариант, если результаты поиска не предоставляют необходимую информацию, это выполнить дополнительный запрос для получения этой информации. Вы пометили этот поток спецификаций так, чтобы ваши шаги были полезны, но при условии, что ваши шаги выглядят примерно так:

When i enter "blue" and search
Then all the items/clothes in the results are blue

затем вы можете реализовать свой шаг затем примерно так (псевдокод):

foreach(var result in searchResults)
{
    if (GetItemColour(result)!=Colours.Blue)
    {
         Assert.Fail("Non blue item returned: " + result);
    }
}

private Colour GetItemColour(SaerchResult result)
{
   //navigate to item description page for given item
   //or call some API to get item details for given search result id
   // then return the colour from that page
} 
Другие вопросы по тегам