> For the complete documentation index, see [llms.txt](https://igor-19.gitbook.io/qa/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://igor-19.gitbook.io/qa/avtomatizaciya-testirovaniya/principy-razrabotki-po/solid-v-avtomatizacii-testirovaniya/i-interface-segregation-principle-princip-razdeleniya-interfeisa.md).

# I — Interface Segregation Principle(Принцип разделения интерфейса)

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

Например: определение небольших специализированных интерфейсов для тестовых действий (например, ILoginPage, IShoppingCartPage), чтобы гарантировать, что тесты зависят только от тех методов, которые им нужны.

```
// Принцип разделения интерфейсов (ISP) 
// Пример: определение небольших, сфокусированных интерфейсов для тестовых действий 
public interface IShoppingCartPage
{
    void AddItemToCart(string item);
    void RemoveItemFromCart(string item);
}

public class ShoppingCartPage : IShoppingCartPage
{
    public void AddItemToCart(string item)
    {
        // Реализация для добавления товара в корзину
    }

    public void RemoveItemFromCart(string item)
    {
        // Реализация для удаления товара из корзины
    }
}

public class ShoppingCartTest
{
    [Test]
    public void UserCanAddItemToCart()
    {
        IShoppingCartPage shoppingCartPage = new ShoppingCartPage();
        shoppingCartPage.AddItemToCart("Product A");
        // Проверка утверждения...
    }
}
```

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