2013-06-24 11 views
5

पर गुजरता है मैंने अपने आंतरिक एप्लिकेशन में लॉगिन करने के लिए बेहत में एक बहुत ही सरल लॉगिन परीक्षण बनाया है। दो लॉगिन प्रकार हैं (एक ही स्क्रीन और बॉक्स से किया गया)। बुनियादी और उन्नत है। केवल अंतर यह है कि लॉग इन करने वाले उपयोगकर्ता में एक से अधिक कंपनी तक पहुंच है और उसे काम करने के लिए कंपनी चुनने के लिए कहा जाता है।फ़ैंटॉमजेएस के माध्यम से बेहट लॉगिन परीक्षण चलाते समय यह केवल पहले रन

मुझे लगता है कि जब भी मैं सेलेनियम के बजाय फैंटॉमजेएस के माध्यम से परिदृश्य चलाता हूं तो वे बहुत तेजी से दौड़ते हैं (जाहिर है क्योंकि एक हेडलेस ब्राउज़र एमुलेटर में कुछ भी प्रस्तुत नहीं किया जाना चाहिए)। जब मैं पहली बार फैंटॉमजेएस लॉन्च करता हूं तो यह दोनों परिदृश्यों को ठीक करता है। लेकिन फिर मैं इसे दूसरी बार चलाता हूं और यह पहली परिदृश्य (मूल लॉगिन) में विफल रहता है।

अगर मैं फ़ैंटॉमजेएस को पुनरारंभ करता हूं तो यह दूसरी कोशिश तक फिर से काम करता है। मैं इससे बहुत उलझन में हूं। ऐसा क्यों है कि मुझे पहले कॉल पर फिर से पारित होने के लिए फ़ैंटॉमजेएस को पुनरारंभ करने की आवश्यकता है।

यदि मैं निर्दिष्ट करता हूं कि मैं इसे बाद के रनों पर उन्नत लॉगिन चलाने के लिए चाहता हूं तो यह उस लॉगिन को भी विफल कर देता है। अगर मैं मूल लॉगिन निर्दिष्ट करता हूं (अभी भी इसे दोनों परिदृश्यों को चलाने से रोक रहा है) तो यह भी विफल हो जाता है। लेकिन जब मैं एक ही कॉल में दोनों परिदृश्य चलाता हूं तो पहला हमेशा विफल रहता है और दूसरा हमेशा गुजरता है।

मैंने ऑर्डर को भी स्विच किया ताकि मूल पहले और पहले परिदृश्य (इस मामले में उन्नत) में दूसरी बार विफल हो और दूसरा गुजरता है। तो दुनिया में क्या चल रहा है?

एक अतिरिक्त बोनस के रूप में मैंने आगे बढ़कर एक पंक्ति जोड़ा जो 'फिर मैं "लॉग आउट" का पालन करता हूं और अचानक अचानक दोनों परिदृश्य पास हो जाते हैं। जो समझ में आता है अगर यह इस तथ्य के लिए नहीं था कि यह दूसरे परिदृश्य के दौरान ठीक काम करता है। अगर यह पहले से लॉग इन है तो यह दोनों विफल नहीं होना चाहिए? क्या यह सुनिश्चित करने का कोई तरीका है कि प्रत्येक परिदृश्य के अंत में फैंटॉमजेएस के लिए कैश साफ़ हो गया है?

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" 
+0

मेरे पास संहिता में एक ही समस्या है। फैंटॉमजेएस सत्र रखें। – Adamamont

+0

मेरे पास एक ही समस्या है, लेकिन मेरे मामले में भी रीसेट() मदद नहीं करता है। – Pavel

उत्तर

9

ठीक है, आखिर में मैंने यह बगजर निकाला। कम से कम आंशिक रूप से। ऐसा लगता है कि परिदृश्यों के बीच सत्र बनाए रखा जा रहा है। यह पूरी तरह से समझा नहीं है कि यह केवल पहली कॉल क्यों है। लेकिन मुझे संदेह है कि अंतिम परिदृश्य बंद होने पर फैंटॉमजेएस पिछले सत्र को खुला रख रहा है और मिंक परिदृश्यों के बीच सत्र का पुनर्निर्माण करता है, लेकिन अंतिम परिदृश्य के अंत के बाद नहीं।

वैसे भी, समाधान प्रत्येक परिदृश्य कॉल के अंत में सत्र को रीसेट करने के लिए संदर्भ या हुक बनाना है। परीक्षण उद्देश्यों के लिए मैंने एक संदर्भ बनाया जो पढ़ता है "और मैं सत्र रीसेट करता हूं"।

मैं इस तरह के रूप में परिभाषित किया गया इस:

/** 
* @Given /^I reset the session$/ 
*/ 
public function iResetTheSession() { 
    $this->getSession()->reset(); 
} 

जब मैं दोनों परिदृश्यों के अंत में इस संदर्भ फोन यह समस्या ठीक हो जाती। तो मुझे लगता है कि मैं आगे बढ़ूंगा और एक पोस्ट-परिदृश्य हुक बनाउंगा जो मेरे लिए इसका ख्याल रखता है।

संबंधित मुद्दे