2014-01-11 3 views
2

나는 다음과 같은 테스트를 거쳤습니다. 파이어 폭스와 크롬을 사용하여 로컬에서 그리고 소스 (적어도 대부분의 경우)에서 실행할 때 잘 동작합니다. 나는 인터넷 익스플로러 나 사파리를 시작할 때 수동으로 시험했을 때 페이지가 잘 작동하는 동안인터넷 익스플로러와 사파리를 테스트하기 위해 소스와 각도기를 사용하십시오.

ptor = protractor.getInstance(); 

baseUrl = protractor.getInstance().params.sBaseUrl; 
aRequiredTextFieldsKeys = [ 
'sFirstName', 
'sLastName', 
'sStreet', 
'sZip', 
'sCity' 
]; 


describe('form', function() 
{ 
var sFormUrl = baseUrl + '#/form'; 

beforeEach(function() 
{ 
    ptor.get(sFormUrl); 
}); 


describe('wholeForm', function() 
{ 

    it('fully filled form => required fields have correct class && submit leads to other route', function() 
    { 

     function checkRequiredClass(el) 
     { 
      expect(el.getAttribute('class')).toContain('ng-valid-required'); 
     } 

     // requried text-fields 
     for (var i = 0; i < aRequiredTextFieldsKeys.length; i++) { 
      var el = element(by.model('oFormData.' + aRequiredTextFieldsKeys[i])); 
      el.sendKeys('a'); 
      checkRequiredClass(el); 
     } 

     // email 
     var elEmail = element(by.model('oFormData.sEmail')); 
     elEmail.sendKeys('[email protected]'); 
     checkRequiredClass(el); 

     // birthday 
     var elBirthday = element(by.model('oFormData.oBirthday')); 
     elBirthday.sendKeys('1.1.1995'); 
     checkRequiredClass(el); 

     // checkboxes 
     var elCheck1 = element(by.model('oFormData.bAgb')); 
     elCheck1.click(); 
     checkRequiredClass(elCheck1); 

     var elCheck2 = element(by.model('oFormData.bPrivatePolicy')); 
     elCheck2.click(); 
     checkRequiredClass(elCheck2); 
     // hack upload bon 
     ptor.executeScript(function() 
     { 
      var scope = $('#application-form-id').scope(); 
      scope.oFormData.bBonUploaded = true; 
     }); 

     // submit form 
     element(by.className('btn-submit')).click(); 

     ptor.getCurrentUrl() 
      .then(function (url) 
      { 
       expect(url).toNotBe(sFormUrl); 
      }); 
    }); 
}); 

는, 나는, 오류의 모든 종류를 얻을. IE를 들어 내가 얻을 :

Message: UnknownError: JavaScript error (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 97 milliseconds Build info: version: '2.30.0', revision: 'dc1ef9c', time: '2013-02-19 00:15:27' System info: os.name: 'Windows Server 2008 R2', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_35' Session ID: 42b30348-8598-4edb-923e-a7019ced6eb0 Driver info: org.openqa.selenium.ie.InternetExplorerDriver Capabilities [{platform=WINDOWS, elementScrollBehavior=0, javascriptEnabled=true, enablePersistentHover=true, ignoreZoomSetting=false, browserName=internet explorer, enableElementCacheCleanup=true, unexpectedAlertBehaviour=dismiss, version=10, cssSelectorsEnabled=true, ignoreProtectedModeSettings=false, requireWindowFocus=false, allowAsynchronousJavaScript=false, handlesAlerts=true, initialBrowserUrl=, nativeEvents=true, takesScreenshot=true}]

Error: Error while waiting for Protractor to sync with the page: {"stack":"TypeError: Unable to get property 'get' of undefined or null reference\n at Anonymous function (Unknown script code:25:5)\n at Anonymous function (Unknown script code:21:14)\n at Anonymous function (Unknown script code:21:2)","description":"Unable to get property 'get' of undefined or null reference","number":-2146823281}

그리고 사파리

는 :

UnknownError: Detected a page unload event; script execution does not work across page loads. (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 384 milliseconds Build info: version: '2.33.0', revision: '4e90c97', time: '2013-05-22 15:32:38' System info: os.name: 'Windows Server 2008 R2', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_35' Session ID: null Driver info: org.openqa.selenium.safari.SafariDriver Capabilities [{platform=WINDOWS, javascriptEnabled=true, cssSelectorsEnabled=true, secureSsl=true, browserName=safari, takesScreenshot=true, version=5.1.7}]

나는 이유에 대해 confsued하고있다. 나는 동일한 결과로 더 간단한 테스트를 시도했다. 로컬 및 원격 URL을 시도했고 waitForAngular, waitptor ignoreAsynch = true과 같은 모든 종류의 지연을 시도했다. 그들 중 누구도 원하는 결과로 이끌지 않습니다. 어떤 제안?

내 각도기 설정 파일 :

// A reference configuration file. 
    exports.config = { 

     seleniumServerJar: null, 
     seleniumPort: null, 
     chromeOnly: false, 
     // Additional command line options to pass to selenium. For example, 
     // if you need to change the browser timeout, use 
     // seleniumArgs: ['-browserTimeout=60'], 
     seleniumArgs: [], 
     sauceUser: 'saucesuer', 
     sauceKey: 'key', 
     allScriptsTimeout: 120000, 
     specs: [ 
      'test/e2e/**/*.js', 
     ], 

     // https://code.google.com/p/selenium/wiki/DesiredCapabilities 
     // https://code.google.com/p/selenium/source/browse/javascript/webdriver/capabilities.js 
     capabilities: { 
      'browserName': 'phantomjs', 
      'phantomjs.binary.path':'node_modules/phantomjs/bin/phantomjs' 
     }, 


     // Selector for the element housing the angular app - this defaults to 
     // body, but is necessary if ng-app is on a descendant of <body> 
     rootElement: 'body', 

     onPrepare: function() 
     { 
    //  driver.manage().timeouts().setScriptTimeout(60000); 
     }, 

     params: { 
      sBaseUrl: 'https://dev.com/' 

     }, 
     baseUrl: 'http://localhost:8000', 

     framework: 'jasmine', 

     // ----- Options to be passed to minijasminenode ----- 
     // 
     // See the full list at https://github.com/juliemr/minijasminenode 
     jasmineNodeOpts: { 
      // onComplete will be called just before the driver quits. 
      onComplete: null, 
      // If true, display spec names. 
      isVerbose: true, 
      // If true, print colors to the terminal. 
      showColors: true, 
      // If true, include stack traces in failures. 
      includeStackTrace: true, 
      // Default time to wait in ms before a test fails. 
      defaultTimeoutInterval: 120000 
     } 
    }; 

이 문제 것 같지 않습니다 동안

, 내가 순차적으로 여러 인스턴스를 실행할 수 툴툴 거리는 소리 - 각도기 러너를 사용합니다.

  chrome: { 
      options: { 
       args: { 
        browser: 'chrome', 
        "idle-timeout": 120 
       } 
      } 
     }, 
     firefox: { 
      options: { 
       args: { 
        browser: 'firefox' 
       } 
      } 
     }, 
     ie9: { 
      options: { 
       args: { 
        browser: 'internet explorer', 
        version: '9', 
        "idle-timeout": 120 
       } 
      } 
     }, 
     ie10: { 
      options: { 
       args: { 
        browser: 'internet explorer', 
        version: '10' 
       } 
      } 
     }, 
     safari7: { 
      options: { 
       args: { 
        browser: 'safari', 
        version: '7' 
       } 
      } 
     }, 
     safari6: { 
      options: { 
       args: { 
        browser: 'safari', 
        version: '6' 
       } 
      } 
     }, 
     safari5: { 
      options: { 
       args: { 
        browser: 'safari', 
        version: '5' 
       } 
      } 
     } 
    } 

grunt.registerTask('e2eall', [ 
    'protractor:ie9', 
    'protractor:ie10', 
    'protractor:safari5', 
    'protractor:safari6', 
    'protractor:safari7', 
    'protractor:firefox', 
    'protractor:chrome' 
]); 

답변

4

우고, 이 부분적으로 해결 각도기 0.17보다 0.18 결정적으로 해결 하였다 특정 테스트 구성의 문제이다. 각도기를 최근 (0.18.1이 시점에서) 업데이트하고 문제가 해결되는지 확인하는 것이 좋습니다.

관련 변경 로그 항목 :

v0.18

(10aec0f) fix(pageload): increase wait timeout

The 300 ms wait caused problems when testing IE on Sauce Labs. It seems way too short. "browser.get()" invariably timed out. Increasing it solved our problem.

v0.17 도움이

(a0bd84b) fix(pageload): add a wait during protractor.get() to solve unload issues

Some systems would not wait for the browser unload event to finish before beginning the asynchronous script execution.

Closes #406. Closes #85.

희망!