KonturControls

Проблемы

  • Палки в колеса при написании тестов
  • Нестабильные обвязки и баги
  • Костыли

Новые контролы

  • Popup, Hint, Tooltip и Portal
  • PopupMenu, TooltipMenu, DropdownMenu, Kebab
  • Dropdown
  • DataPicker
  • TokenInput
  • FileUploader
  • Tab
  • Paging
  • Radio
  • Toast
  • Toggle
  • Spinner

Что не должны делать методы

  • Должны приводить контрол в нужное состояние
  • Если это не возможно кидать ошибку
  • Реализовывать базовые минисценарии в завязанные только на этот контрол

Что должны делать методы

  • pageElementAdapter.ClickWithRequestCapturing
  • browser.JavaScriptExecutor.WaitPendingRequests
  • ассерты проверяющие изначальное состояние контрола

WaitЧетотам

public void WaitChecked(string timeoutMessage = "Не дождались активации чекбокса", double timeout = 10000) =>
    Wait.For(() => Checked, timeoutMessage, timeout);

public void WaitUnchecked(string timeoutMessage = "Не дождались расчекивания чекбокса", double timeout = 10000) =>
    Wait.For(() => !Checked, timeoutMessage, timeout);

public void WaitEnabled(string timeoutMessage = "Не дождались разблокировки чекбокса", double timeout = 10000) =>
    Wait.For(() => Enabled, timeoutMessage, timeout);

public void WaitDisabled(string timeoutMessage = "Не дождались блокировки чекбокса", double timeout = 10000) =>
    Wait.For(() => Disabled, timeoutMessage, timeout);

public void WaitError(string timeoutMessage = "Не дождались появления ошибки валидации в чекбоксе", double timeout = 10000) =>
    Wait.For(() => HasError, timeoutMessage, timeout);

public void WaitNoError(string timeoutMessage = "Не дождались исчезновения ошибки валидации в чекбоксе", double timeout = 10000) =>
    Wait.For(() => HasError, timeoutMessage, timeout);
sidePage.MainTariffsBlock.WaitVisible();
browser.JavaScriptExecutor.WaitPendingRequests();
sidePage.MainTariffsBlock.TariffBlocks[0].WholesaleInput.SendKeys("2", true);
browser.JavaScriptExecutor.WaitPendingRequests();
sidePage.MainTariffsBlock.TariffBlocks[0].WithRecipientsRadioButton.Click();
Wait.For(() => sidePage.MainTariffsBlock.TariffBlocks[0].RecipientsComboBox.Exists);

browser.JavaScriptExecutor.WaitPendingRequests();
sidePage.MainTariffsBlock.TariffBlocks[0].RecipientsComboBox.SelectItem(recipient1.INN);
sidePage.MainTariffsBlock.TariffBlocks[0].SelectedRecipients.First().InnerText.Should().Contain(recipient1.INN, $"Должны найти в получателях получателя с ИНН {recipient1.INN} и именем {recipient1.Name}");

browser.JavaScriptExecutor.WaitPendingRequests();
sidePage.MainTariffsBlock.TariffBlocks[0].RecipientsComboBox.SelectItem(recipient2.INN);
sidePage.MainTariffsBlock.TariffBlocks[0].SelectedRecipients.Last().InnerText.Should().Contain(recipient2.INN, $"Должны найти в выбранных получателях получателя с ИНН {recipient2.INN} и именем {recipient2.Name}");

sidePage.MainTariffsBlock.TariffBlocks[0].WithRecipientsHelpText.InnerText.Should().Be("Выберите 2 получателей", "Должны показать ограничение на количество получателей");
browser.JavaScriptExecutor.WaitPendingRequests();

var orderPage = sidePage.ConfirmAndCloseButton.Click<OrderPage>();
browser.JavaScriptExecutor.WaitPendingRequests();

orderPage.CreateBill.Click(buttonEnabledTimeout: 30000);
browser.JavaScriptExecutor.WaitPendingRequests();
browser.JavaScriptExecutor.WaitPendingRequests();

Как правильно ждать

.WaitЧетотам()

Wait.For(

.ClickAndFollow<OrderPage>()
browser.GoToPage
 
public void Submit()
{
    CreateBill.WaitEnabled("Не дождались появления кнопки 'Выставить счет'", 60000);
    CreateBill.Click();
    Loader.WaitDisappear("Не дождались окончания выставления счёта", 60000);
}

ControllsCollection

private ControlsCollection<Button> Options => new(
    () => Menu.FindAll.ByCss("button")
);
private IEnumerable<Button> Options =>
   Menu.FindAll.ByCss("button").Select(x => new Button(() => x));

Было

Стало

Лоадеры страниц

public abstract class BasePartnerPage : Page
{
    public override ILoader Loader => new PageLoader(() => Get.ByTId("page-loader"));

    public override bool IsLoaded => !Loader.IsActive;
}

Костыли поиска элементов

  • Поиск спиннеров 
  • Определение активности лоадера
  • Поиск MenuItem в PopupMenu
  • Поиск Token в TokenInput

Вспомогательные библы

Проблема WaitExistsAndVisible

public void WaitExistAndVisible(double timeout = 20000, [CanBeNull] string timeoutMessage = null)
{
    Wait.For(() => Exists && Visible, timeoutMessage ?? "Ожидание видимости элемента", timeout);
}

public bool Visible => Execute(() => pageElementAdapter.Displayed);

public bool Exists => TryGetElement(true);

KonturControls

By Andrey Osipov

KonturControls

  • 384