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
Вспомогательные библы
- Наша react-props2attrs
- react-props2attrs
- react-selenium-testing
Проблема 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