각도기 테스트는 때때로 Angular 앱을 다시로드 할 때 실패합니다.

헨리 블리스

동일한 Angular 앱을 다시로드하는 Protractor 테스트가 있습니다. 때때로 Travis 빌드에서 실패하지만 빌드를 한두 번 다시 시작한 후에 통과합니다. 드물게 내 로컬 컴퓨터에서 실패합니다. Travis 빌드는 Firefox를 사용하지만 내 컴퓨터에서 실패한 경우 Firefox와 Selenium의 chromedriver를 모두 사용했습니다.

나는 그것이있는 곳이기 때문에 ( 이 GitHub 문제에서rootElement: 'html' 권장 하는 Protractor 에서 권장) 설정 ng-app했지만 여전히이 오류가 발생합니다.

Protractor가 페이지와 동기화되기를 기다리는 동안 오류 : "루트 요소 (html)에 인젝터가 없습니다. 이는 ng-app 내부에 없음을 의미 할 수 있습니다."

이 오류는 Angularangular.element('html').injector() 가로드 된 경우에도 falsey 반환 한 결과입니다 . 각도기 코드 이전 테스트 에서이를 확인합니다.

테스트에는 index.html동일한 각도 앱인 다른 으로 리디렉션되는 것이 포함됩니다 . 리디렉션 이유는 언어 선택을 제공 한 다음 해당 언어로 앱을 다시로드하기위한 것입니다.

여러 로케일이 있습니다 (단순성을 위해 여기에 두 개 표시됨). app문서 루트이므로 app/index.html시스템 언어를 감지하거나 기본값을 en-gb로 지정한 다음로 리디렉션 하는 진입 점도 있습니다 app/<locale>/index.html. 전자는 Angular 앱이 아닙니다 ( app/). 후자는 ( app/<locale>/)이며 ../common/라이브러리 및 Angular 모듈 파일 대한 링크 입니다. index.html로케일 폴더 파일은 동일합니다.

문서 루트를 방문하면 어떻게됩니까?

/ -> 리디렉션 /en-gb/#/language

그리고 독일어를 선택할 때?

/en-gb/#/language리디렉션 ../de/#/menu->/de/#/menu

디렉토리 구조 :

└── app
    ├── common
    │   ├── fonts
    │   ├── images
    │   ├── lib
    │   ├── modules
    │   └── styles
    ├── de
    │   ├── i18n.js
    │   └── index.html
    ├── en-gb
    │   ├── i18n.js
    │   └── index.html
    └── index.html

테스트:

(function () {

    'use strict';

    describe('Module: app, language screen:', function () {

        beforeEach(function () {
            browser.get('http://localhost:9000/en-gb/#/language/');
            this.$germanChoice = // get the clickable element to select German
            this.$buttonContinue = // get the clickable element to continue
        });

        describe('continue button', function () {
            it('should go forward to the menu', function () {
                this.$germanChoice.click();
                this.$buttonContinue.click();
                expect(browser.getCurrentUrl()).toBe('http://localhost:9000/de/#/menu/');
            });
        });

    });

}());

index.html축소 된 파일을 사용하는 로케일 :

<!doctype html>
<!--[if IE 8]>         <html id="ng-app" ng-app="app" lang="{{ app.locale.html }}" class="no-js lt-ie10 lt-ie9"> <![endif]-->
<!--[if IE 9]>         <html id="ng-app" ng-app="app" lang="{{ app.locale.html }}" class="no-js lt-ie10">        <![endif]-->
<!--[if gt IE 9]><!--> <html id="ng-app" ng-app="app" lang="{{ app.locale.html }}" class="no-js">                <!--<![endif]-->
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title ng-bind="app.page.title ? app.page.title + ' - ' + app.page.titleBase : app.page.titleBase"></title>
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <link rel="stylesheet" href="../common/lib/nouislider/jquery.nouislider.css" />

        <!--[if gt IE 8]><!-->
            <link rel="stylesheet" href="../common/styles/b8a085fb.main.css">
        <!--<![endif]-->

        <!--[if lt IE 9]>
            <link rel="stylesheet" href="../common/styles/f71e8123.ie.css">
        <![endif]-->

        <!--[if lt IE 9]>
            <script src="../common/scripts/a5663f12.lt-ie9.js"></script>
        <![endif]-->
    </head>

    <body ng-class="{ 'ios6': app.environment.ios6, 'gt-ios6': app.environment.gtIos6, 'cordova': app.environment.cordova }">

        <div ng-view="" autoscroll="true"></div>

        <script src="../common/scripts/cbd2241e.app.js"></script>
        <script src="i18n.js"></script>

    </body>
</html>
아이작 라이먼

비 Angular 로그인 페이지 (일부는 여러 단계가 있음)에 문제가 발생하는 경우가 있습니다. 언어 선택 페이지가 비슷할 것 같습니다. 솔루션은 .NET의 노출 된 Webdriver API와 결합 된 테스트의 논리입니다 browser.driver.

if ('some condition that determines you are on a non-Angular page') {
  browser.driver.findElement(by.id('language-choice')).click();
}

테스트하기에 가장 좋은 조건은 다음과 같습니다.

  1. 고유 한 요소가 표시되는지 테스트합니다.
  2. 현재 페이지의 URL을 가져 와서 예상 값과 비교하십시오.

browser.driver각도기를 우회하기 때문에 Angular 페이지에 있지 않을 때 언제든지 사용 하십시오. 그렇지 않으면 Protractor는 Angular를 찾아서 찾지 못하고 오류를 발생시킵니다. 당신이 할 수있는 모든 것은 browser.driver메뉴의 하단 영역에서 찾을 수 있습니다 : http://angular.github.io/protractor/#/api

그런 다음 각도기를 사용하기 전에 Angular 페이지가 나타날 때까지 기다리려면 다음 스 니펫을 사용해보세요.

browser.driver.wait(function() {
    return browser.driver.getCurrentUrl().then(function(url) {
        return url.toString().indexOf('my angular page url') !== -1;
    }, function(err) {
        throw err;
    });
}, 5000, 'Timed out waiting for your Angular page to load.');

이것은 당신의 onPrepare진술 에서 특히 유용 합니다 (그냥 return시작 부분에 추가하십시오 browser.driver.wait). 테스트는 Angular 페이지가로드 될 때까지 기다린 후 마음의 내용으로 각도기를 조정할 수 있습니다.

약간의 엉망으로이 동일한 스 니펫을 사용하여 다단계 비 Angular 소개 페이지에 반응 할 수 있습니다. 그리고 자체의 깔끔한 작은 기능으로 캡슐화되어, 이것은 각도기가 각도가 아닌 페이지에 덤프 될 수있는 모든 곳에서 재사용 될 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내 테스트는 보이지 않기 때문에 헤드리스로 실행할 때 실패합니다.

분류에서Dev

Cursor의 iterate () 메서드는 문자열을 datetime으로 변환 할 때 때때로 실패합니다.

분류에서Dev

각도기 테스트 실행기로 앱을로드 할 수 없습니다.

분류에서Dev

Apple이 새로운 XCode 버전을 출시 할 때마다 UI 테스트가 실패합니다.

분류에서Dev

실제 서비스에 도달 할 때 moq로 C # 단위 테스트가 실패합니다.

분류에서Dev

Angular 앱을 다시로드 할 때 라우팅을 무시하고 항상 루트 페이지로 이동합니다.

분류에서Dev

wsgi로로드 할 때 flask 앱이 실패하지만 dev 서버에서는 제대로 작동합니다.

분류에서Dev

스트림 다운로드를 시도 할 때 getaddrinfo ()가 실패 함

분류에서Dev

.ajax는 페이지를 다시로드 할 때만 실행됩니다 (다른 작업을 수행하기 전에 URL을로드하려고합니다).

분류에서Dev

웹팩 모드 '프로덕션'을 사용할 때 Angular @ ngtools / webpack 빌드가 실패합니다.

분류에서Dev

--target을 사용할 때 알 수없는 이유로 rpmbuild가 실패합니다.

분류에서Dev

셀러리는 작업을 처리 할 때 무작위로 실패합니다.

분류에서Dev

셀러리는 작업을 처리 할 때 무작위로 실패합니다.

분류에서Dev

Proxmox는 iptables 규칙을 적용 할 때 "로그인 실패, 다시 시도하십시오"를 표시합니다.

분류에서Dev

테스트 실행기를 실행할 때 0 시나리오로 출력을 얻었습니다.

분류에서Dev

React-native : 앱을 다시로드 할 때 사용자는 로그인 상태를 유지해야합니다.

분류에서Dev

각도, 상태 응용 프로그램을 변경할 때 페이지가 다시로드되는 이유

분류에서Dev

iis에서 실행되는 Angular 2 응용 프로그램은 다시로드 할 때 찾을 수 없음을 반환합니다.

분류에서Dev

다시로드 할 때 조각 충돌

분류에서Dev

내가 실행할 때마다 앱에서 Gmail 로그인 통합을 시도 할 때마다 동일한 오류가 표시됩니다.

분류에서Dev

Grails로 war 파일을 패키징 할 때 다른 스타일 시트로드

분류에서Dev

Grails로 war 파일을 패키징 할 때 다른 스타일 시트로드

분류에서Dev

React 프런트 엔드에서 Flask 백엔드로 POST 요청을 시도 할 때 404가 발생합니다.

분류에서Dev

각진 스트랩 탭은 데이터를 다시로드 할 때 탭을 열지 않습니다.

분류에서Dev

위치 : 아래로 스크롤 할 때 Safari의 고정이 실패하기 시작합니다.

분류에서Dev

Highcharts는 테이블 데이터 소스로로드 할 때 도구 설명을 표시합니까?

분류에서Dev

Phonegap Build iOS : 앱이 기기에서 앱 아이콘을 클릭 할 때마다 설치를 시도하지만 메시지없이 실패합니다.

분류에서Dev

테이블을 다시로드 할 때 java.util.ConcurrentModificationException 발생

분류에서Dev

서비스 방법을 감시 할 때 Jasmine 단위 테스트가 실패합니다.

Related 관련 기사

  1. 1

    내 테스트는 보이지 않기 때문에 헤드리스로 실행할 때 실패합니다.

  2. 2

    Cursor의 iterate () 메서드는 문자열을 datetime으로 변환 할 때 때때로 실패합니다.

  3. 3

    각도기 테스트 실행기로 앱을로드 할 수 없습니다.

  4. 4

    Apple이 새로운 XCode 버전을 출시 할 때마다 UI 테스트가 실패합니다.

  5. 5

    실제 서비스에 도달 할 때 moq로 C # 단위 테스트가 실패합니다.

  6. 6

    Angular 앱을 다시로드 할 때 라우팅을 무시하고 항상 루트 페이지로 이동합니다.

  7. 7

    wsgi로로드 할 때 flask 앱이 실패하지만 dev 서버에서는 제대로 작동합니다.

  8. 8

    스트림 다운로드를 시도 할 때 getaddrinfo ()가 실패 함

  9. 9

    .ajax는 페이지를 다시로드 할 때만 실행됩니다 (다른 작업을 수행하기 전에 URL을로드하려고합니다).

  10. 10

    웹팩 모드 '프로덕션'을 사용할 때 Angular @ ngtools / webpack 빌드가 실패합니다.

  11. 11

    --target을 사용할 때 알 수없는 이유로 rpmbuild가 실패합니다.

  12. 12

    셀러리는 작업을 처리 할 때 무작위로 실패합니다.

  13. 13

    셀러리는 작업을 처리 할 때 무작위로 실패합니다.

  14. 14

    Proxmox는 iptables 규칙을 적용 할 때 "로그인 실패, 다시 시도하십시오"를 표시합니다.

  15. 15

    테스트 실행기를 실행할 때 0 시나리오로 출력을 얻었습니다.

  16. 16

    React-native : 앱을 다시로드 할 때 사용자는 로그인 상태를 유지해야합니다.

  17. 17

    각도, 상태 응용 프로그램을 변경할 때 페이지가 다시로드되는 이유

  18. 18

    iis에서 실행되는 Angular 2 응용 프로그램은 다시로드 할 때 찾을 수 없음을 반환합니다.

  19. 19

    다시로드 할 때 조각 충돌

  20. 20

    내가 실행할 때마다 앱에서 Gmail 로그인 통합을 시도 할 때마다 동일한 오류가 표시됩니다.

  21. 21

    Grails로 war 파일을 패키징 할 때 다른 스타일 시트로드

  22. 22

    Grails로 war 파일을 패키징 할 때 다른 스타일 시트로드

  23. 23

    React 프런트 엔드에서 Flask 백엔드로 POST 요청을 시도 할 때 404가 발생합니다.

  24. 24

    각진 스트랩 탭은 데이터를 다시로드 할 때 탭을 열지 않습니다.

  25. 25

    위치 : 아래로 스크롤 할 때 Safari의 고정이 실패하기 시작합니다.

  26. 26

    Highcharts는 테이블 데이터 소스로로드 할 때 도구 설명을 표시합니까?

  27. 27

    Phonegap Build iOS : 앱이 기기에서 앱 아이콘을 클릭 할 때마다 설치를 시도하지만 메시지없이 실패합니다.

  28. 28

    테이블을 다시로드 할 때 java.util.ConcurrentModificationException 발생

  29. 29

    서비스 방법을 감시 할 때 Jasmine 단위 테스트가 실패합니다.

뜨겁다태그

보관