2015-10-30 16 views
5

में प्रोटैक्टर का उपयोग करके मैं Protractor का उपयोग कर Electron के साथ चल रहे किसी एप्लिकेशन के लिए यूनिट परीक्षण और ई 2 परीक्षण स्थापित करने का प्रयास कर रहा हूं। मैं कई अलग अलग पदों (this one मदद किया था) की बात कर रहा हूँ, लेकिन मैं अभी भी एक त्रुटि मुझे समझ नहीं आता मिलती है:इलेक्ट्रॉन

Message: 
    Error while waiting for Protractor to sync with the page: "angular could not be found on the window" 
Stacktrace: 
    undefined 

मेरे conf.js फ़ाइल इस तरह दिखता है:

exports.config = { 
    directConnect : true, 
    seleniumAddress: 'http://localhost:4444/wd/hub', 
    baseUrl:"file://home/me/workspace/testing-project/main.js", 
    capabilities: { 
     browserName: "chrome", 
     chromeOptions: { 
      binary: "/home/me/.linuxbrew/lib/node_modules/electron-prebuilt/dist/electron", 
      args: ["--test-type=webdriver"] 
     } 
    }, 
    specs: ['todo-specs.js'], 
    onPrepare: function(){ 
     browser.resetUrl = "file://"; 
     browser.driver.get("file://"); 
    } 
}; 

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

उत्तर

2

स्पष्ट रूप से, इलेक्ट्रॉन बाइनरी का उपयोग करना वास्तव में आपके एप्लिकेशन को लॉन्च करने के लिए पर्याप्त नहीं है। हालांकि, बिल्डिंग आपके आवेदन के लिए बाइनरी और इसे अपने conf.js फ़ाइल में काम करता है।
मैं इस के लिए मेरी फाइल को कम करने में सक्षम है:
conf.js

exports.config = { 
    seleniumAddress: 'http://localhost:4444/wd/hub', 
    specs: ['test-spec.js'], 
    capabilities: { 
     browserName: "chrome", 
     chromeOptions: { 
      binary: "./dist/myAwesomeApp/myAwesomeAppBinary" 
     } 
    }, 
    onPrepare: function() { 
     browser.resetUrl = "file://"; 
    } 
}; 

इसे इस तरह करने से, browser.get() है और न ही browser.driver.get() शुरू करने के लिए एक baseUrl या उपयोग करने के लिए वर्णन करने के लिए कोई जरूरत नहीं है इलेक्ट्रॉन में ऐप।
हालांकि, मैं ऐप बाइनरी बनाने की ज़रूरत नहीं लेता, लेकिन मुझे नहीं लगता कि यह अभी संभव है।

0

प्रोटैक्टर को कोणीय ऐप्स के साथ काम करने के लिए डिज़ाइन किया गया है, लेकिन आप इसे "गैर-कोणीय" ऐप्स के लिए भी उपयोग कर सकते हैं।

यदि आप अपने इलेक्ट्रॉन ऐप के साथ कोणीय का उपयोग कर रहे हैं, तो यह केवल ng-app और सिंक करेगा।

यदि आप कोणीय ऐप का उपयोग नहीं कर रहे हैं, तो आपको isAngularSite(false) सेट करना चाहिए, फिर यह सिंक्रनाइज़ करने का प्रयास नहीं करेगा।

+1

एप्लिकेशन ** index.html ** फ़ाइल में 'ng-app' का उपयोग कर रहा है जिसे ** main.js ** (' mainWindow.loadUrl ('file: //' + __dirname + '/ index.html '); ') लेकिन यह इससे पहले भी विफल रहता है: ** index.html ** कभी प्रदर्शित नहीं होता है। मैंने आपके समाधान की कोशिश की, यह कोणीय को समन्वयित करने के मुद्दे को हल करता है, लेकिन परीक्षण विफल हो जाते हैं क्योंकि HTML कभी प्रदर्शित नहीं होता है। –

1

प्रोटैक्टर इलेक्ट्रॉन के साथ अच्छी तरह से काम नहीं करता है, क्योंकि इसमें इलेक्ट्रॉन-विशिष्ट एपीआई तक पहुंच नहीं है और रेंडरर को ठीक से नियंत्रित नहीं किया जा सकता है। दूसरी ओर, Spectron, विशेष रूप से इलेक्ट्रॉन के लिए डिज़ाइन किया गया है और इसमें एपीआई प्रोटैक्टर के समान ही है। यह आपको एक ही समय में मुख्य और रेंडरर प्रक्रियाओं दोनों का परीक्षण करने की सुविधा देता है।

मुझे एंगुलर 2 को ठीक से लोड करने के लिए प्रतीक्षा करने के लिए प्रोटैक्टर से कुछ कोड कॉपी करना पड़ा।

const path = require('path'); 
const electron = require('electron-prebuilt'); 
var Application = require('spectron').Application 
var assert = require('assert') 

let appPath = path.join(__dirname, '..', 'dist'); 

function awaitAngular2(client) { 
    client.timeoutsAsyncScript(5000); 
    // From: https://github.com/angular/protractor/blob/master/lib/clientsidescripts.js 
    // Returns a promise that resolves when all of Angular 2's components are loaded and stable 
    return client.executeAsync(function(done) { 
    try { 
     var testabilities = window.getAllAngularTestabilities(); 
     var count = testabilities.length; 
     var decrement = function() { 
     count--; 
     if (count === 0) { 
      done(); 
     } 
     }; 
     testabilities.forEach(function(testability) { 
     testability.whenStable(decrement); 
     }); 
    } catch (err) { 
     done(err.message); 
    } 
    }); 
} 

describe('application launch', function() { 
    this.timeout(10000) 

    beforeEach(function() { 
    this.app = new Application({ 
     path: electron, 
     args: [appPath] 
    }); 
    return this.app.start().then(() => { 
     return awaitAngular2(this.app.client); 
    }) 
    }); 

    afterEach(function() { 
    if (this.app && this.app.isRunning()) { 
     return this.app.stop() 
    } 
    }); 

    it('shows an initial window', function() { 
    return this.app.client.getWindowCount().then(function (count) { 
     assert.equal(count, 1) 
    }) 
    }); 

    it('shows a headline', function() { 
    this.app.client.getText('app-banner h1').then(function (bannerText) { 
     assert.equal(bannerText, 'Tour of Heroes'); 
    }) 
    }); 
}); 

आप एक से अधिक .spec फ़ाइलों को स्वचालित रूप से चले, तो आप इस Jasmine या मोचा Node.js के साथ एकीकृत कर सकते हैं: (। उपेक्षा अगर आप कोणीय उपयोग नहीं कर रहे) यहाँ एक काम उदाहरण है परीक्षण धावक।

0

यह मानते हुए कि आप अपने प्रोजेक्ट जहां main.js स्थित है जड़ से चांदा लॉन्च करते हैं, आप स्थापित करने के लिए अपने protractor.conf.js तो तरह सक्षम होना चाहिए: क्या electron पारित हो जाता है

exports.config = { 
    directConnect: true, 
    capabilities: { 
     browserName: 'chrome', 
     chromeOptions: { 
      binary: 'node_modules/.bin/electron', 
      args: ['app=main.js'] 
     } 
    }, 
    onPrepare: function() { 
     browser.resetUrl = "file://" 
    } 
} 

capabilities.chromeOptions.args के लिए विकल्प हैं। capabilities, selenium has documentation on it here पर अधिक दस्तावेज़ीकरण के लिए।

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