t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как передать параметр в TestCleanup метод

csharp
mstest
webdriver
Теги: #<Tag:0x00007fb2f544d180> #<Tag:0x00007fb2f544cfa0> #<Tag:0x00007fb2f544ce60>

(Игорь) #1

День добрый.
Есть куча тестов. В каждом тесте создается новый элемент с рандомный именем. На текущий момент я в конце каждого теста вызываю метод для удаления созданного элемента и передаю в него имя.
Проблема заключается, что возникла необходимость избавиться от этого в каждом тесте и вынести этот процесс в TestCleanup метод.
Вопрос состоит в следующем, каким образом в TestCleanup метод передать параметорм мя элемента для удаления?

Код Clean метода

 public void Clean(string templateName)
        {

            ClickDeleteTemplate(templateName);
            ClickConfirmDeleteTemplate();
        }

Простой тест

public void RenameTemplate()
        {
            ...

            cpiMainPage.Invoke();

            cpiModel.CreateTemplate(templateName);
            cpiModel.RenameTemplate(templateName, newTemplateName);
            var isTemplateRenamed = cpiMainPage.IsElementExistInTheTree(newTemplateName);

            Assert.IsTrue(isTemplateRenamed, "Template is not found");

            cpiMainPage.Clean(newTemplateName);
        }

(Valentin G ) #2

А нету возможности использовать фиксированное имя шаблона?


(Игорь) #3

Нет, фиксированное имя мне не подходит. Тесты проходят в несколько потоков и нужно уникальное имя.


(Vladislav Abramov) #4

кладите в статичную переменную имя и в cleanup методе обращайтесь к ней


(Игорь) #5

Добавил статическую переменную. Сделал метод Clean статическим

public static void Clean(string templateName)
        {
            var element = Driver.FindElement(By.XPath("//p[text()='" + templateName + "']/../following-sibling::div[contains(@class, " +
                                                "'DataTree-actions-container')]//button[@data-test-element-id='delete-template']"));
            element.Click();
            btnConfirmDeleteTemplate.WaitUntilVisible().Click();
        }

Теперь получаю следующие ошибки внутри метода


(Vladislav Abramov) #6

значит где-то ещё надо статики добавить


(Valentin G ) #7

Если вы используете Dependency Injection, то можно имя шаблона сохранять и потом его вытаскивать в том методе.
Еще как вариант, можно использовать несколько уникальных имен (для каждого теста свое). Тогда во время очистки проверять, какое из имен присутсвует и такое и удалять.
А статические переменные лучше не использовать, они могут сломать параллельное выполнение тестов.


(Vladislav Abramov) #8

вешаете на статику [ThreadStatic] и ничего не ломается 🤷


(Alexandr D.) #9

А разве в MSTest нет аналогичного NUnit’у TestContext? В который можно что угодно положить и оно будет до конца теста там храниться.