Selenium webdriver 如何在Cucumber中编写正确的特征文件

Selenium webdriver 如何在Cucumber中编写正确的特征文件,selenium-webdriver,cucumber,bdd,feature-file,Selenium Webdriver,Cucumber,Bdd,Feature File,我试图学习BDD cucumber,并试图为登录场景编写一个功能文件,其中包含有效和无效的用户名。 对于有效的用户,将被登录并注销。但是,对于无效的用户名,将要求用户再次转到登录页面,并要求用户写入正确的凭据 我想问一下,在“情景大纲”中,我们能同时有积极和消极的情景吗? 你能帮我为这个简单的场景编写完美的功能文件吗? 看看我的功能文件代码(PS,我是初学者:) 功能:登录操作 描述:此功能将测试登录和注销功能 场景大纲:使用有效和无效凭据登录 给定用户位于主页上 当用户导航到登录页面时 然后

我试图学习BDD cucumber,并试图为登录场景编写一个功能文件,其中包含有效和无效的用户名。 对于有效的用户,将被登录并注销。但是,对于无效的用户名,将要求用户再次转到登录页面,并要求用户写入正确的凭据

我想问一下,在“情景大纲”中,我们能同时有积极和消极的情景吗? 你能帮我为这个简单的场景编写完美的功能文件吗? 看看我的功能文件代码(PS,我是初学者:)


功能:登录操作
描述:此功能将测试登录和注销功能
场景大纲:使用有效和无效凭据登录
给定用户位于主页上
当用户导航到登录页面时
然后用户输入“”和“”
并保持案件的有效性
然后用户应该登录
并显示登录成功的消息
然后用户输入“”和“”
并将案件视为无效
然后用户将被要求返回到登录页面
并提供正确的凭证
示例:
|用户名|密码|大小写|
|abc@gmail.com|12345 |有效|
|abc1@gmail.com|dfsd2 |无效|
场景:成功从应用程序注销
当用户从应用程序注销时
然后显示消息“注销成功”
并由驱动程序退出浏览器

“完美”-没有这样的事

你写的情景大纲非常混乱,可能是对情景大纲工作原理的错误解释。基本上,您使用示例表的每一行登录两次,即相同的用户名和密码(SO中的第3行和第7行)。在情景大纲中,所有步骤都将在示例中提供的每一行数据中重复。请参阅多个可用教程

为什么要混淆有效登录和无效登录?将它们放在不同的场景中。易于理解。
将注销移动到单独的功能文件。 然后,您可以将登录场景的前3个步骤移动到后台。减少重复

在检查多个数据的有效案例的登录功能时,您将遇到问题。一旦有效用户登录,那么大多数web应用程序将登录凭据存储在cookie等中。因此,当对登录页面发出新请求时,它可能会跳过登录页面,并进入主页。然后,当selenium代码查找userid输入框时,您将得到NoSuchElementException。因此,对于有效的情况,您也需要注销

@Login
Scenario Outline: Login with valid and Invalid Credentials 

    Given User is on Home Page 
    ....
    ....

@Valid
Examples: 
        |username|password|Case|
        |abc@gmail.com|12345|Valid|

@InValid
Examples: 
        |username|password|Case|
        |abc@gmail.com|12345|Valid|

要运行有效登录案例,请使用runner中的标记选项作为
{“@Login”、“@Valid”}
,或者如果在Cucumber2上
@Login和@Valid
。对于无效的一个替换为@Invalid.

'Perfect'-不是这样的事情

Scenario: Good sign in
  Given I am registered
  When I sign in
  Then I should be signed in

Scenario: Not registered sign in
  Given I am not registered
  When I sign
  Then I should not be signed in
  And ...

Scenario: Registered with wrong password
  Given I am registered
  When I sign in with a bad password
  Then I should not be signed in
  And ...
你写的情景大纲非常混乱,可能是对情景大纲工作原理的错误解释。基本上,您使用示例表的每一行登录两次,即相同的用户名和密码(SO中的第3行和第7行)。在情景大纲中,所有步骤都将在示例中提供的每一行数据中重复。请参阅多个可用教程

为什么要混淆有效登录和无效登录?将它们放在不同的场景中。易于理解。
将注销移动到单独的功能文件。 然后,您可以将登录场景的前3个步骤移动到后台。减少重复

在检查多个数据的有效案例的登录功能时,您将遇到问题。一旦有效用户登录,那么大多数web应用程序将登录凭据存储在cookie等中。因此,当对登录页面发出新请求时,它可能会跳过登录页面,并进入主页。然后,当selenium代码查找userid输入框时,您将得到NoSuchElementException。因此,对于有效的情况,您也需要注销

@Login
Scenario Outline: Login with valid and Invalid Credentials 

    Given User is on Home Page 
    ....
    ....

@Valid
Examples: 
        |username|password|Case|
        |abc@gmail.com|12345|Valid|

@InValid
Examples: 
        |username|password|Case|
        |abc@gmail.com|12345|Valid|
要运行有效登录案例,请使用runner中的标记选项作为
{“@Login”、“@Valid”}
,或者如果在Cucumber2上
@Login和@Valid
。对于无效的一个,替换为@Invalid

Scenario: Good sign in
  Given I am registered
  When I sign in
  Then I should be signed in

Scenario: Not registered sign in
  Given I am not registered
  When I sign
  Then I should not be signed in
  And ...

Scenario: Registered with wrong password
  Given I am registered
  When I sign in with a bad password
  Then I should not be signed in
  And ...
小贴士:

  • 保持简单
  • 不要使用轮廓
  • 将你如何做的细节保留在场景之外
  • 每个路径有一个场景
  • 10个简单的场景比一个复杂的场景要好
您可以在中看到如何编写这样的场景的详细信息(在Ruby中)

注意事项:

  • 这只是一个人的意见
  • 您需要能够以这种方式编写代码(当您将如何完成事情的所有细节从cucumber推送到helper代码中时)
  • 注册是登录的先决条件
小贴士:

  • 保持简单
  • 不要使用轮廓
  • 将你如何做的细节保留在场景之外
  • 每个路径有一个场景
  • 10个简单的场景比一个复杂的场景要好
您可以在中看到如何编写这样的场景的详细信息(在Ruby中)

注意事项:

  • 这只是一个人的意见
  • 您需要能够以这种方式编写代码(当您将如何完成事情的所有细节从cucumber推送到helper代码中时)
  • 注册是登录的先决条件

正如这里一个极好的答案所指出的,每个场景本质上都是一个测试用例,因此必须明确分开

然而,理解给定/何时/然后(在其最基本的本质上)等同于系统测试的传统三个阶段是至关重要的:排列/动作/断言,因此:

给定:在已知状态下安排系统

时:命令系统(要测试的内容)

然后:断言结果是你所期望的

就这样!(当然,BDD的内容远不止这些——但这些都是executa的基础。)