Selenium 및 Oxygen Flow를 사용한 매우 쉬운 UI 테스트 자동화

8592 단어 csharpwebdevtesting
저는 엔터프라이즈 환경에서 웹 앱을 코딩하고 있으며 가장 필요할 때 QA 팀의 리소스를 사용할 수 없는 경우가 많습니다. 그래서 저는 Selenium을 사용하여 UI "단위 테스트"를 직접 작성하고 개발 팀이 제어하는 ​​기본 품질을 갖기로 결정했습니다. 아래 코드가 의미가 있으면 계속 읽으십시오 ...

using Oxygen;

[TestClass]
public class Demo : Oxygen.Flow
{
   [TestMethod]
   public void SearchTestFF()
   {
      var result =
          CreateContext(BrowserBrand.FireFox, new Uri("https://github.com/"))
          | Find("input[type=text][name=q]")
          | SetText("OxygenFlow")
          | Click("ul[id=jump-to-results]");

      Assert.IsFalse(result.HasProblem, result);
   }
}


뼈에 약간의 "고기"가 있는 실제 프로덕션 테스트 코드는 다음과 같습니다(HR 역할이 사용자 계정 시작 및 종료 날짜를 변경하는 예).

[TestMethod]
public void RenewUserTest ()
{
  string surname = null;
  string startDate;
  string status = string.Empty;

  AssertNoProblem(
    BaseContext
    | LoginAs(HRUser.Credentials)
    | OpenAdminMenu("Initate Exit")
    | Use(SearchUser(0, "*0"), c => 
        surname = GetSurnameFromUserDisplayName(c.Element.Text))
        | PressEnter
        | Find("#UserDetails-Startdate")
        | UseElement((OpenQA.Selenium.Remote.RemoteWebElement e) => startDate = e.Text)
    | SetText("#Enddate", DateTime.Today.AddDays(1).ToDDMMYYYY())
    | SubmitAndConfirm
    | OpenAdminMenu("Renew User")
    | SearchFirstUser(surname + ",*")
    | PressEnter
    | SetText("#Startdate", "01/01/2017")
    | SetText("#Enddate", "01/01/2028")
    | SubmitAndConfirm
    | GetUserStatus(surname, value => status = value)
    | Assertion((context) => status.Contains("[active]"), $"Expected status: '[active]' instead of '{status}'")
  );
}


이것은 C# 코드이지만 순수한 객체 지향 두뇌와 언어 자체에는 약간의 확장이 있을 수 있습니다. 기본적으로 함수형 프로그래밍 Maybe, Error 및 State 모나드의 아이디어를 적용한 것입니다. 기능적 구성 가능성과 같은 많은 유용한 기능을 제공합니다.

public static FlowStep SetText(string cssSelector, string text) =>
       (Context context) => context | Find(cssSelector) | SetText(text);


위의 SetText(cssSelector, text)는 Find(cssSelector)와 SetText(text)의 두 가지 간단한 단계로 구성됩니다.

내 목표는 산만한 아티팩트가 없는 UI 테스트의 흐름을 가능한 한 명확하고 읽기 쉽게 만드는 것이었습니다. Selenium 라이브러리는 CSS 선택기를 사용한 검색을 지원하므로 테스트 중인 웹 페이지에서 탐색하는 데 필요한 모든 것이 있습니다. 위의 예를 보면 물론 반복되는 문자열 리터럴과 CSS 선택기를 문자열 상수로 이동합니다.

현재 GitHub OxygenFlow repo는 모든 Selenium 기능을 다루는 것과는 거리가 멀고 지금까지 필요한 것입니다.

자세한 내용은 https://github.com/karel66/OxygenFlow

좋은 웹페이지 즐겨찾기