5

मुझे कई परीक्षण लिखने की आवश्यकता है (उदाहरण के लिए लॉगिन परीक्षण, परीक्षण में लॉग इन करने के बाद एप्लिकेशन का उपयोग करें, लॉगआउट परीक्षण इत्यादि) और उन्हें सभी को अलग-अलग फ़ाइलों में रहने की आवश्यकता है। मेरे द्वारा चलाया जाने वाला मुद्दा प्रत्येक परीक्षण के बाद होता है, अगले परीक्षण की शुरुआत में, एक नया ब्राउज़र सत्र शुरू होता है और यह नए सत्र के कारण लॉग इन नहीं होता है, इसलिए मेरे सभी परीक्षण लॉग इन परीक्षण को छोड़कर असफल हो जाएंगे।Nightwatch.js परीक्षणों के लिए सेलेनियम वेबड्राइवर के लिए ब्राउज़र सत्र का पुन: उपयोग करें

तो, क्या मेरे ब्राउज़र कोड को डुप्लिकेट किए बिना मेरे सभी परीक्षणों को अनुक्रमिक रूप से चलाने के लिए एक ही ब्राउज़र सत्र का उपयोग करने का कोई तरीका है? क्षमा करें अगर यह एक पोस्टोस्ट है लेकिन मैंने खोज और शोध किया है और कोई जवाब नहीं मिला है।

या, क्या किसी भी तरह परीक्षण फ़ाइलों को चेन करने का कोई तरीका है? एक फ़ाइल की तरह आप चलाते हैं कि बस सभी अन्य परीक्षण फाइलों को कॉल करता है?

+0

Nightwatch.js से परिचित नहीं है लेकिन मैं सेलेनियम परीक्षण मामलों के साथ लॉगिन/लॉगआउट सत्र समस्या से परिचित हूं। मैं सुझाव देता हूं कि [नाइटवॉच टेस्ट टैग] (http://nightwatchjs.org/guide#test-tags) और/या [टेस्ट हुक] (http://nightwatchjs.org/guide#setup-teardown) दस्तावेज में नीचे पाया गया। –

उत्तर

8

एक साथ श्रृंखला के लिए इस समारोह का उपयोग करना फ़ाइलें:

extend = function(target) { 
    var sources = [].slice.call(arguments, 1); 
    sources.forEach(function (source) { 
     for (var prop in source) { 
      target[prop] = source[prop]; 
     } 
    }); 
    return target; 
} 

और इस तरह इस मास्टर फाइल करने के लिए फ़ाइलों को जोड़ने:

require("./testName.js"); 
module.exports = extend(module.exports,testName); 

और इस तरह परीक्षण फ़ाइल नज़र होने:

testName = { 
    "Test" : function(browser) { 

     browser 
      // Your test code 
    } 
}; 

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

+0

यह टैग कार्यक्षमता को तोड़ नहीं देगा? – SgtPooki

3

सत्र का पुन: उपयोग अच्छा विचार नहीं है क्योंकि आप अलग-अलग ऑर्डर में परीक्षण चला सकते हैं, लेकिन आप पहले से फ़ंक्शन में लॉगिन कोड डाल सकते हैं या इसे कस्टम आदेशों में भी निकाल सकते हैं।

उदाहरण: https://github.com/dimetron/backbone_app/blob/master/nightwatch/custom-commands/login.js

1 - Nightwatch config में जोड़ने

"custom_commands_path" : "nightwatch/custom-commands", 

2 - कस्टम आदेशों बनाएं/login.js

exports.command = function(username, password, callback) { 
    var self = this; 
    this 
     .frame(null) 
     .waitForElementPresent('input[name=username]', 10000) 
     .setValue('input[name=username]', username) 
     .waitForElementPresent('input[name=password]', 10000) 
     .setValue('input[name=password]', password) 
     .click('#submit'); 

    if(typeof callback === "function"){ 
     callback.call(self); 
    } 
    return this; // allows the command to be chained. 
}; 

3 - टेस्ट कोड - उपयोग करने से पहले। लॉगिन (उपयोगकर्ता, apssword)

module.exports = { 

    before: function(browser) { 
    console.log("Setting up..."); 
    browser 
     .windowSize('current', 1024, 768) 
     .url("app:8000/") 
     .waitForElementVisible("body", 1000) 
     .login('user', 'password') 
    }, 

    after : function(browser) { 
    browser.end() 
    console.log("Closing down..."); 
    }, 

    beforeEach: function(browser) { 
    browser 
     .pause(2000) 
     .useCss() 
    }, 

    "Test 1": function(browser) { 
    browser 
     .assert.containsText("#div1", "some tex") 
     .pause(5000); 
    }, 

    "Test 2": function(browser) { 
    browser 
     .assert.containsText("#div2", "some text") 
     .pause(5000); 
    } 
} 
+0

एकाधिक लॉग इन अभी भी अनावश्यक हैं और बड़ी संख्या में परीक्षणों के साथ स्वीट्स के लिए बहुत समय बर्बाद कर रहे हैं ... जब तक कि आपका ऐपस्टेट प्रत्येक लॉगिन के बीच वास्तव में अलग न हो, जिसका अर्थ है कि आपको बड़ी समस्याएं हैं। – SgtPooki

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