Tôi đã tạo một bài kiểm tra đăng nhập rất đơn giản trong Behat để đăng nhập vào ứng dụng nội bộ của chúng tôi. Có hai loại đăng nhập (được thực hiện từ cùng một màn hình và hộp). Có cơ bản và nâng cao. Sự khác biệt duy nhất là ở người dùng nâng cao đang đăng nhập có quyền truy cập vào nhiều công ty và được yêu cầu chọn một công ty để làm việc.Khi chạy thử nghiệm đăng nhập Behat thông qua PhantomJS, nó chỉ chạy trên lần chạy đầu tiên
Tôi thấy rằng bất cứ khi nào tôi chạy các kịch bản thông qua PhantomJS thay vì Selenium chúng chạy nhanh hơn rất nhiều (rõ ràng vì không có gì phải được hiển thị trong trình giả lập trình duyệt không đầu). Khi tôi lần đầu tiên khởi động PhantomJS nó chạy cả hai kịch bản tốt. Nhưng sau đó tôi chạy nó lần thứ hai và nó không thành công kịch bản đầu tiên (đăng nhập cơ bản).
Nếu tôi khởi động lại PhantomJS, nó sẽ hoạt động lại cho đến lần thử thứ hai. Tôi rất bối rối bởi điều này. Tại sao tôi cần phải khởi động lại PhantomJS để có được cả hai bài kiểm tra để vượt qua lần nữa trong lần gọi đầu tiên.
Nếu tôi chỉ định rằng tôi chỉ muốn nó chạy đăng nhập nâng cao trên lần chạy tiếp theo thì không thể đăng nhập được nữa. Nếu tôi chỉ định đăng nhập cơ bản (vẫn ngăn không cho nó chạy cả hai kịch bản) nó cũng không thành công. Nhưng khi tôi chạy cả hai kịch bản trong cùng một cuộc gọi đầu tiên luôn luôn thất bại và một trong những thứ hai luôn luôn vượt qua.
Tôi thậm chí đã chuyển sang thứ tự để cơ bản được chạy thứ hai thay vì đầu tiên và kịch bản đầu tiên (trong trường hợp này nâng cao) không thành công và lần thứ hai vượt qua. Vì vậy, những gì trên thế giới đang xảy ra?
Là một phần thưởng bổ sung, tôi đã tiếp tục và thêm một dòng có nội dung 'Sau đó tôi theo dõi "Đăng xuất"' và tất cả các trường hợp đột ngột đều truyền lại. Mà sẽ có ý nghĩa nếu nó không được cho thực tế là nó hoạt động tốt trong kịch bản thứ hai. Không nên nó không thành công nếu nó đã được đăng nhập? Có cách nào để đảm bảo rằng bộ nhớ cache cho PhantomJS bị xóa ở cuối mỗi trường hợp?
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 "[email protected]"
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 "[email protected]"
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"
Tôi có cùng một vấn đề trong Codeception. PhantomJS giữ phiên. – Adamamont
Tôi có cùng một vấn đề, nhưng trong trường hợp của tôi, ngay cả thiết lập lại() không giúp đỡ. – Pavel