【问题标题】:Cucumber JUnit framework validating common scenarios linked to same step definitionCucumber JUnit 框架验证链接到相同步骤定义的常见场景
【发布时间】:2022-02-17 21:07:53
【问题描述】:

所以我正在尝试在步骤类上测试我的功能文件。我在断言与同一步骤定义相关联的多个常见场景时遇到问题。

  • 外汇;
  • 功能:黄瓜自动化

场景:验证菜单项

  • 假设用户在“https://www.example.com/”上
  • 当用户点击“XYZ”菜单项时
  • 然后用户应该导航到“https://www.example.com/xxx/”
  • 用户应该得到“XXXX”文本
  • 用户应该得到“一些随机文本”文本

因此,这 2 个“与”步骤在单步定义中进行验证。我正在尝试使用 POM 类中的两个不同定位器来断言“And”。

@And("user should see {string} text")
public void userShouldSeeText(String key) {

    Assert.assertEquals(key, helpMeSearchPage.mainHeader.getText());
    Assert.assertEquals(key, helpMeSearchPage.subHeader.getText());
    Assert.assertEquals(key, helpMeSearchQaPage.header.getText());
    Assert.assertEquals(key, helpMeSearchQaPage.subHeading.getText());
}

但它不起作用,我的每条 Assert 行已经运行了两次,我找不到解决方案。我正在尝试学习 JUnit Cucumber,但在这一步遇到问题。

【问题讨论】:

  • 你能在两个页面上都包含相关的html吗?也许您需要更多饮料用途的定位器?

标签: java junit cucumber bdd


【解决方案1】:

Cucumber 使用正则表达式来匹配步骤定义。所以这两个步骤:

And user should get "XXXX" text
And user should get "Some random text" text

匹配步骤定义:

@And("user should get {string} text")

因此它会运行整个步骤两次,因为它匹配了两次。

(请注意,与您的相比,在上述步骤中,我已将 see 更改为 get - 如果问题是它匹配,那是您的问题。)

如果您希望它以不同方式匹配两个步骤,您可以使用不同的正则表达式进行匹配,也可以更改步骤并添加不同的定义。例如:

And user should get "XXXX" text on the main page
And user should get "Some random text" text in QA help

将匹配

@And("user should get {string} text on the main page")
@And("user should get {string} text in QA help")

分别。

请注意,一般来说,我们尽量不谈论点击按钮和查看页面中的文本;这通常会导致非常详细的场景,步骤太多且难以维护。相反,您可能希望根据用户实现的目标来表述这些步骤,例如:

Given the user is on the homepage
When they select "Peaches" from the menu
Then they should see more information about "Peaches"
And relevant allergy warnings for "Peaches".

这使得它更多地关注客户试图对您的网站做什么,而不是实施细节,将语言保留在问题而不是解决方案空间中。您用于验证 information about "Peaches" 外观的自动化可以保持不变。

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    相关资源
    最近更新 更多