Проблема 1 - Плательщики
Проблема 1 - Плательщики. Боль.
protected override void FixtureSetUp()
{
base.FixtureSetUp();
payers = new ArrayList();
while (payers.Count < 26)
{
payers.AddRange(CsPayerServiceClient.SelectByInnEntry(DataGenerator.GenDigitString(1), 1, 100)
.Where(x => !string.IsNullOrEmpty(x.INN) && x.INN.Length == 10 && x.KPP.Length == 9 && !x.IsPotential && !x.IsDeleted)
.OrderBy(x => Guid.NewGuid()).ToArray());
payers = new ArrayList(payers.ToArray().Distinct().ToArray());
}
}
payer = payers[0] as Abonent;
secondPayer = payers[1] as Abonent;
payers.RemoveRange(0, 2);
Проблема 1 - Плательщики. Решение.
public interface IPayerGetter
{
void Initialize(bool firstTime = true);
Abonent Get(ClientType type, bool isCorp = false, bool isBudget = false);
Abonent GetClientWithFocus();
(Abonent head, Abonent branch) GetHeadWithBranch();
(Abonent head, Abonent branch) GetHeadWithBranchWithEdo();
string GetNotExistingPayerInn(ClientType type);
}
payer = PayerGetter.Get(ClientType.LegalEntity);
secondPayer = PayerGetter.Get(ClientType.LegalEntity);
Проблема 2 - Wait-For.
Проблема 2 - Wait-For. Проблема
// TODO: browser.GoToClientPage(payer)
Wait.For(() => browser.GoToPage<ClientPageBase>(ClientPageBase.Uri(payer.Id)).Title == payer.Name, 80000);
// TODO: разобраться, зачем Wait (можно было бы использовать browser.GoToClientPage(payer.Id, PayerName);)
var clientPage = browser.GoToPage<ClientPageBase>(ClientPageBase.Uri(payer.Id));
// Assert.AreEqual(PayerName, clientPage.Title, "Страница плательщика не загрузилась");Проблема 2 - Wait-For. Решение.
До рефакторинга:
Wait.For -> 339
Exists -> 277
После рефакторинга:
Wait.For -> 71
Exists -> 196
Проблема 2 - Wait-For. Пример.
blockEditPs.Inn.Input.SendKeys(inn);
blockEditPs.Kpp.Input.SendKeys(kpp);
blockEditPs.Name.Input.SendKeys(name);
blockEditPs.ClientType.Exists.Should().BeFalse();
Wait.For(() => !blockEditPs.Submit.Disabled);
blockEditPs.Submit.Click();
Wait.For(() => !pSPage.BlockEditPs.IsOpened);
pSPage.WaitForCloseBlockEditPs();
pSPage.MainInfoTabButton.Click();
pSPage.MainInfoTab.OrganizationInn.InnerText.Should().Be(inn + "—" + kpp);
pSPage.MainInfoTab.OrganizationName.InnerText.Should().Be(name);
pSPage.OrganizationName.InnerText.Should().Contain(name.ToUpper());
pSPage.CheckEventsExistInHistory("Отредактированы реквизиты");blockEditPs.Inn.Input.SendKeys(inn);
blockEditPs.Kpp.Input.SendKeys(kpp);
blockEditPs.Name.Input.SendKeys(name);
blockEditPs.ClientType.Exists.Should().BeFalse();
blockEditPs.Submit.Click();
pSPage.BlockEditPs.WaitClosed();
pSPage.WaitForCloseBlockEditPs();
pSPage.MainInfoTabButton.Click();
pSPage.MainInfoTab.OrganizationInn.WaitValue(inn + "—" + kpp);
pSPage.MainInfoTab.OrganizationName.WaitValue(name);
pSPage.OrganizationName.WaitValueContains(name.ToUpper());
pSPage.CheckEventsExistInHistory("Отредактированы реквизиты");корявый Wait.For, про него можно забыть, а второй вообще не нужен
мог развалиться не дождавшись текста
этот парень делал вид что проверяет, а по факту тратил время и не проверял
Проблема 2 - Wait-For. Пример.
public static void CheckEventsExistInHistory(this ProspectiveSaleCardPage prospectiveSaleCardPage, params string[] values)
{
var flag = false;
for (var i = 0; i < 5; i++)
{
try
{
prospectiveSaleCardPage.Refresh();
prospectiveSaleCardPage.HistoryTabButton.Click();
foreach (var value in values)
{
prospectiveSaleCardPage.HistoryTab.InnerText.Should().Contain(value);
}
flag = true;
}
catch (Exception)
{
// ignored
}
if (flag) { break;}
}
}Даже если prospectiveSaleCardPage взворвется, этот метод скажет что у нас все ок!
Проблема 3 - Тесты медленные.
Проблема 3 - Тесты медленные. Боль.
Проблема 3 - Тесты медленные. Решение.
Проблема 3 - Тесты медленные. Решение.
В ходе реализации параллельного запуска столкнулись с такими проблемами:
Проблема 3 - Тесты медленные. Решение.
Раньше
Нынче
Проблема 3 - Тесты медленные. Решение.
Раньше
Нынче
Автотесты могут быть зелеными.
Интересные моменты, на которые наткнулись
Интересные моменты, на которые наткнулись
Интересные моменты, на которые наткнулись
Интересные моменты, на которые наткнулись
Проблема 4 - Как жить дальше.
Проблема 4 - Как жить дальше.
var prospectiveSaleId = pSList.ProspectiveSaleList
.FindAll
.ByCss("[data-ft-id^='prospective-sale-row-']")
.First()
.PageElementAdapter
.GetAttribute("data-ft-id")
.TrimStart("prospective-sale-row-".ToCharArray());
...
Guid.Parse(prospectiveSaleId);
----------------------------------------------------------
"prospective-sale-row-eaa68d1a-90c5-45a5-bebb-c5a759237733"
.TrimStart("prospective-sale-row-".ToCharArray());
result: "68d1a-90c5-45a5-bebb-c5a759237733"Задачи на будущее
Вопросы?