2014-10-10 6 views
5

मैं (2) ई 2e ककड़ी परीक्षण चलाने के लिए प्रोटैक्टर का उपयोग कर रहा हूं। मुझे एक वेब-ऐप मिला जो कोणीय जेएस आधारित है। मैं एक असली एंड्रॉइड डिवाइस पर परीक्षण को दूरस्थ रूप से चलाने के लिए एपियम का उपयोग कर रहा हूं।प्रोटैक्टर का इंतजारफॉरएंगुलर() कोणीय-वेबएप (वास्तविक डिवाइस पर एपियम/क्रोम) पर असफल रहता है

windows8.1 
[email protected] (with submodule [email protected]) 
[email protected] 
android device with 4.4.4 

मेरी चांदा विन्यास (अर्क), https://github.com/angular/protractor/blob/master/docs/browser-setup.md करने के लिए इसी:: यहाँ संस्करणों मैं उपयोग कर रहा हूँ रहे हैं

currentDeviceUDID = (...); 
var appToTestURL = 'http://my.website.com:9000/app/index.html'; 

exports.config = { 
    seleniumAddress: 'http://localhost:4723/wd/hub'; 
    chromeOnly: false, 
    specs: ['features/sample.feature'], 

    capabilities: { 
    browserName: 'chrome', 
    'appium-version': '1.0', 
    platformName: 'Android', 
    platformVersion: '4.4.4', 
    udid: currentDeviceUDID 
    }, 

    baseUrl: appToTestURL 

    framework: 'cucumber', 
    cucumberOpts: { 
    require: 'features/stepDefinitionsSample.js', 
    tags: '@dev', 
    format: 'progress' 
    }, 

    // configuring wd in onPrepare 
onPrepare: function() { 
    var wd = require('wd'), 
    protractor = require('protractor'), 
    wdBridge = require('wd-bridge')(protractor, wd); 
    wdBridge.initFromProtractor(exports.config); 
    }, 

    allScriptsTimeout: 30000, 
    getPageTimeout: 30000 
}; 

आप देख सकते हैं, मैं के साथ चांदा के webdriver यूआरएल जगह ले ली है एपियम वेबड्राइवर। मैं "appium &" के साथ कमांडलाइन से appium शुरू करते हैं, तो मैं "protactor cucumbertest.conf"

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

समस्या निम्नलिखित है। फोन कॉल करने के लिए प्रतिक्रिया नहीं करता, और webdriver प्रॉक्सी एक 500

रिटर्न https://github.com/angular/protractor/issues/1358 के अनुरूप, मैं कि waitForAngular() फ़ंक्शन (कॉल

['getCurrentUrl', 'getPageSource', 'getTitle']; 

waitForAngular के पीछे में चांदा में मिलाया जाता है समझ में आ

functions.waitForAngular = function(selector, callback) { 
    var el = document.querySelector(selector); 
    try { 
    if (angular.getTestability) { 
     angular.getTestability(el).whenStable(callback); 
    } else { 
     angular.element(el).injector().get('$browser'). 
     notifyWhenNoOutstandingRequests(callback); 
    } 
    } catch (e) { 
    callback(e); 
    } 
}; 

अतिरिक्त जानकारी:) फ़ाइल protractor.js में नीचे समारोह है, जो फोन करने के लिए प्रॉक्सी है जब मैं Stim वेबड्राइवर (ब्राउज़र) ऑब्जेक्ट पर एक त्रुटि को अनुकरण करें, त्रुटि संदेश प्रोटैक्टर निर्देशिका के अंदर chromedriver.exe को इंगित करता है। मुझे समझ में नहीं आ रहा है कि त्रुटि एपियम के क्रोमड्राइवर


इतनी tldr से क्यों नहीं है; सफल कॉल प्रतीक्षा किए बिना प्रतीक्षा करें, मैं फ़ोन पर पृष्ठ पर एक्सेस तत्वों को स्थिर (स्थिर या बिल्कुल नहीं) कर सकता हूं, इसलिए परीक्षण नहीं कर रहा हूं। हो सकता है कि यहां कुछ मौलिक विन्यास विवरण गलत समझा जाए, सभी संकेतों का स्वागत है।

संपादित करें: जोड़ा appium सर्वर यहां लॉग: http://pastebin.com/vqBGUdXH

+1

आपकी क्षमताओं सभी सही हैं और एपियम सर्वर सही तरीके से काम कर रहा है। सभी आदेशों को संसाधित करने के बाद 500 लौटा दिया गया है। चर्चा.appium.io पर पोस्ट करने का प्रयास करें आपको – sheeptest

उत्तर

4

मैं मैं समस्या की पहचान की है मान लेते हैं। एपियम और प्रोटैक्टर ठीक काम करते हैं।

मेरा कोणीय जेएस ऐप समस्या का कारण बनता है। यह मतदान के लिए $ टाइमआउट का उपयोग करता है (मैं कोणीय 1.07 पर मजबूर हूं जिसमें कोई अंतराल नहीं है)। यह प्रक्षेपक को पृष्ठ को अभी भी लोडिंग चरण में होने की उम्मीद करने के लिए और समाप्त नहीं होने का कारण बनता है। इसलिए फंक्शन कॉल waitForAngular() कभी भी वापस नहीं लौटाता है और निर्दिष्ट टाइमआउट-टाइमपैन के बाद परीक्षण टाइमआउट।

यह अपेक्षित व्यवहार और जाना जाता है, भी दस्तावेज (बेहतर पहले दस्तावेज़ पढ़;) है) http://angular.github.io/protractor/#/timeouts

डॉक पर पता चलता है निरंतर मतदान के लिए निम्नलिखित: $interval साथ $timeout बदल देते हैं:

अपने आवेदन तो निरंतर चुनाव $timeout या $http, यह पूरी तरह से लोड होने के रूप में कभी पंजीकृत नहीं होगा। आपको लगातार जारी होने वाली किसी भी चीज के लिए $interval सेवा (अंतराल.जेएस) का उपयोग करना चाहिए (कोणीय 1.2 आरसी 3 में पेश किया गया)।

अभी के लिए, मैं इस मुद्दे को एक और तरीका तय: निर्मित कोणीय समन्वयन अक्षम और मैन्युअल रूप से समन्वयित

this.Before(function(next){ 
    ptor = protractor.getInstance(); 
    ptor.ignoreSynchronization = true; //disables waitForangular() 
    next(); 
}); 
  1. सिंक विधि 1:

    //at a testcase, wait for an element to be visible with a promise/then 
    browser.wait(function() { 
        element.all(by.css('.myCssClass')).then(function (items) { 
         items[0].getText().then(function (text) { 
          console.log(text); 
         }); 
        }); 
        return true; 
    } 
    
  2. सिंक विधि 2:

    // "eventually" (chai-as-promised) internally uses "promise" (and therefore acts like "then") 
    browser.get(url); 
    expect(browser.getTitle()).to.eventually.equal("connect me").and.notify(next); 
    
+1

पर सबसे अच्छी प्रतिक्रिया मिलेगी, मुझे यहां जोड़ना होगा कि आप $ टाइमआउट का उपयोग तब तक कर सकते हैं जब तक कि आप $ timeout पर .cancel फ़ंक्शन को सही तरीके से चलाएं। $ अंतराल के साथ $ टाइमआउट को प्रतिस्थापित करना स्पष्ट नहीं है क्योंकि उनके पास सही व्यवहार नहीं है। मेरी पोस्ट http://stackoverflow.com/questions/40832962/angular-1-5-timeout-using-a-httpinterceptor और $ timeout को रद्द करने के तरीके पर टिप्पणी देखें, उसके बाद भी आप प्रतीक्षाफोरएंजुलर का उपयोग जारी रख सकते हैं –

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

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