我在 Behat 中创建了一个非常简单的登录测试来登录我们的内部应用程序。有两种登录类型(从同一屏幕和框中完成)。有基础的和高级的。唯一的区别是,在高级登录用户可以访问多个公司,并被要求选择一家公司工作。
我发现每当我通过 PhantomJS 而不是 Selenium 运行场景时,它们的运行速度都会快得多(显然,因为无需在无头浏览器模拟器中呈现任何内容)。当我第一次启动 PhantomJS 时,它运行这两种场景都很好。但后来我第二次运行它,第一个场景(基本登录)失败了。
如果我重新启动 PhantomJS,它会再次工作,直到第二次尝试。我对此感到非常困惑。为什么我需要重新启动 PhantomJS 才能让两个测试在第一次调用时再次通过。
如果我指定我只是希望它在后续运行中运行高级登录,那么它也会使该登录失败。如果我指定基本登录(仍然阻止它运行这两种方案),它也会失败。但是当我在同一个调用中运行这两个场景时,第一个总是失败,第二个总是通过。
我什至切换了顺序,以便基本运行第二而不是第一个,第一个场景(在这种情况下为高级)失败,第二个通过。那么世界上到底发生了什么?
作为额外的奖励,我继续添加了一行,上面写着“然后我遵循“注销””,突然之间,两种情况都再次通过了。如果不是因为它在第二种情况下工作正常,那将是有道理的。如果它已经登录,它不应该失败吗?有没有办法确保在每个场景结束时清除 PhantomJS 的缓存?
Feature: Login
Login to app using a basic user
Login to app using a multi-company user
@javascript
Scenario: Basic Login
Given I am on "/"
And I wait a few seconds
When I fill in "login" with "ijones"
And I fill in "password" with "SomeP@ssword"
And I press "LoginButton"
And I wait a few seconds
Then I should see "By clicking below"
And I press "OK"
Then I should see "Welcome"
@javascript
Scenario: Advanced Login
Given I am on "/"
When I fill in "login" with "rtyler"
And I fill in "password" with "SomeP@ssword"
And I press "LoginButton"
Then I wait for the company selection box
And I click a field "company"
And I pick "Test Company 2"
And I press "CompanyLoginButton"
Then I should see "By clicking below"
And I press "OK"
Then I should see "Welcome"