代码之家  ›  专栏  ›  技术社区  ›  AnOldSoul

如何概括Selenium Cumber中的登录步骤,避免功能文件中的重复步骤?

  •  1
  • AnOldSoul  · 技术社区  · 7 年前

    我在自动化项目中使用Selenium+Cucumber,并使用Java编写。我已经编写了一个功能文件,在每个场景中我都会重复4-5个登录步骤。下面是在每个场景中重复出现的登录行。

    Scenario: Display the relevant items assigned when logged in as an testUser
        Given I am on the login page
        And I fill email with valid testUser email address
        And I fill password with valid testUser password
        And I press Log in
        When I click on the selector
        Then I should see all the items assigned to my testUser account
    

    这里的密钥工作“testUser”是参数化的。有时,对另一个用户(如“stageUser”)重复相同的步骤。对于这类步骤,Cucumber是否提供了一种以某种方式概括这些步骤的方法?因为每一个场景都是从这6行开始的,这样一来,scearios看起来就更大了,而且有了这些重复的步骤。

    任何建议都将不胜感激。

    3 回复  |  直到 7 年前
        1
  •  1
  •   Grasshopper    7 年前

    你应该考虑把常见的步骤移到后台。 看起来有点像黑客,但你可以在下面的场景描述中提到用户。

      Background: 
        Given Do given
        When Do when
        Then Do then
    
      Scenario: User is - Test User One
        And user name is
    
      Scenario: User is - Test User Two
        And user name is
    

    然后在Before钩子中捕获该用户。然后,用户将在场景中的各个步骤中可用。

    private String user;
    
    @Before
    public void before(Scenario scen) {
        this.user = scen.getName().substring(scen.getName().indexOf('-') + 2);
    }
    
        2
  •  1
  •   diabolist    7 年前

    写出更好的场景和步骤。你的一切都是关于你是如何登录的,所以重复是痛苦的。相反,写下只与你正在做的事情有关的步骤;这些更容易重复使用。

    所以

    Scenario: Login
      Given I am registered
      When I login
      Then I should be logged in
    

    后来

    Feature: Something that requires me to be logged in
    
    Background
      Given I am logged in
    
    Scenario: Do something
      When I do something
      Then something should be done
    

    看看我是如何把一大堆背景简化成更简单、更抽象的东西的。

    我将在这里给出一些关于实现的提示

    Given I am logged in
      @i = create_registered_user
      login(user: @i
    end
    
    When I login
      login(user: @i)
    end
    
    Given I am registered
      @i = create_registered_user
    end
    
    

    您可以以任何复杂程度应用此方法。请注意,在上一个场景中,我们是如何使用相对复杂的注册行为的,而该场景或功能甚至没有意识到(注册是登录的一部分)。

        3
  •  0
  •   Val Kalinichenko    7 年前

    使用@Before和@After注释分别在每个场景之前和之后运行。当我们需要执行一些全局设置/清理时:@BeforeSuite和@AfterSuite