2017-05-29 7 views
1

環境や取り組みを発行します。 2つのスイート:Test1.jsとTest2.js、Config。 JS設計POMのフレームワーク:ページの同期が

設計問題: - 2つの異なるサイト(簡単なボタンのクリック)をテストでページオブジェクトを使用する場合は、最初のテストは、ボタンをクリックして失敗した2つ目は、設定ファイルの仕様で与えられる(渡し:[」。 /specs/Test1.js','./specs/Test2.js '])。独立して実行すると両方のテストが合格になります!最初のテストで要素が見つかりませんでした。

フォルダ構造: ./pageobjects/Angular.po.js & AngularHomepage.po.js & CommonUtils.po.js ./specs/Test1.js & Test2.js

ファイル: コンフィグ。 JS

var HtmlScreenshotReporter = require('protractor-jasmine2-screenshot-reporter'); 
var reporter = new HtmlScreenshotReporter({   
    pathBuilder: function(currentSpec, suites, browserCapabilities) { 
    return browserCapabilities.get('browserName') + '/' + currentSpec.fullName; 
    } 
}); 

exports.config = {  
    capabilities: { 
    'browserName': 'chrome' 
    }, 

    specs: ['./specs/Test1.js','./specs/Test2.js'], 

    jasmineNodeOpts: { 
    defaultTimeoutInterval: 30000 
    }, 

    // Setup the report before any tests start 
    beforeLaunch: function() { 
    return new Promise(function(resolve){ 
     reporter.beforeLaunch(resolve); 
    }); 
    }, 

    // Setup before every test starts 
    onPrepare: function() { 
    browser.manage().window().maximize(); 
    browser.manage().timeouts().implicitlyWait(5000); 

    // Assign the test reporter to each running instance 
    jasmine.getEnv().addReporter(reporter); 
    }, 

    // Close the report after all tests finish 
    afterLaunch: function(exitCode) { 
    return new Promise(function(resolve){ 
     reporter.afterLaunch(resolve.bind(this, exitCode)); 
    }); 
    } 
}; 

Angular.po.js

var Angularpage = function() { 
     var getStartedBtn = element(by.css('.hero-cta.button-plain.md-button')); 
     this.clickgetStartedBtn = function(button) { 
      getStartedBtn.click(); 
     };   
    };  
    module.exports = Angularpage 

AngularHomepage.po.js

var AngularHomepage = function() { 
     var learnBtn = element(by.css('.learn-link'));  
     this.clickLearnBtn = function(button) { 
      learnBtn.click(); 
      };  
    };  
    module.exports = AngularHomepage 

CommonUtils.po.js

var CommonUtils = function() {   
     this.get = function(url) { 
      browser.get(url,10000); 
      }; 
     this.getTitle = function(title) { 
      return browser.getTitle(); 
      }; 
     this.goBack = function(button) { 
      browser.navigate().back(); 
      };  
    };   
    module.exports = CommonUtils 

Test1.js

//Importing multiple page objects and creating instances 
    var commonUtils = require('./../pageobjects/CommonUtils.po.js'); 
    var utils = new commonUtils(); 
    utils.get('http://www.angularjs.org'); 

    var homePage = require('./../pageobjects/angularHomePage.po.js'); 
    var angularHomepage = new homePage(); 

    describe('Angularjs homepage tests', function() 
    { 
     beforeEach(function() {  
     browser.waitForAngular(); 
     }); 

     //Works with angular and non-angular page 
     it('Should click a button and navigate to non-angularpage', function(){  
     angularHomepage.clickLearnBtn(); 

     //Interacting with non Angular site in between 
     //Wait for page to load and verify the url 
     browser.ignoreSynchronization = true; 
     browser.driver.wait(function() { 
      return browser.driver.getCurrentUrl().then(function(url) {    
       return (/codeschool/).test(url); 
      }); 
     }); 

     expect(browser.getTitle()).toEqual('AngularJS vs Angular | Code School');  
     utils.goBack(); 
     browser.ignoreSynchronization = false;  
     }); 
}); 

Test2.js

//Importing multiple page objects and creating instances 
    var angularPage = require('./../pageobjects/Angular.po.js'); 
    var angularpage = new angularPage(); 

    var commonUtils = require('./../pageobjects/CommonUtils.po.js'); 
    var commonUtils = new commonUtils(); 
    commonUtils.get('https://angular.io/'); 

    describe('Angular IO Page tests', function() 
    { 
     beforeEach(function() { 
     browser.waitForAngular(); 
     }); 

     it('Should click Get started button and navigate to new page', function() {   
     //Button click 
     angularpage.clickgetStartedBtn(); 

     //Wait for page to load and verify the url 
     browser.wait(function() { 
      return browser.driver.getCurrentUrl().then(function(url) { 
       return (/latest/).test(url); 
      }); 
     }); 

     //Verify Page title from common page objects 
     commonUtils.getTitle(function(text){ 
      expect(text).toEqual('One framework. - Angular');   
     });  
     });  
    }); 

実行エラー: NoSuchElemen TERROR:ロケータを使用していません要素:(CSSセレクタ、.learnリンク)することにより

答えて

0

問題は、これらの行にある

// Test1.js 
var utils = new commonUtils(); 
utils.get('http://www.angularjs.org'); 

そして

// Test2.js 
var commonUtils = new commonUtils(); 
commonUtils.get('https://angular.io/'); 

あなたは "getを配置する必要がありますsをbeforeEach()に入力します。 beforeEachは、それぞれdescribeの前に "testenvironment"を "セットアップ"するために使用されます。 (また、確かにそれをテストし、それが動作します;-))

はそれが役に立てば幸い

更新

あなただけの各テスト(it)あなたが使用する必要があるため、一度ロードされたURLをしたい場合例えば、あなたのTest2.jsが

//Importing multiple page objects and creating instances 
 
var angularPage = require('./../pageobjects/Angular.po.js'); 
 
var angularpage = new angularPage(); 
 

 
var commonUtils = require('./../pageobjects/CommonUtils.po.js'); 
 
var commonUtils = new commonUtils(); 
 

 
describe('Angular IO Page tests', function() { 
 
    // Now it is loaded once for all `it`'s 
 
    beforeAll(function() { 
 
    commonUtils.get('https://angular.io/'); 
 
    }); 
 

 
    beforeEach(function() { 
 
    browser.waitForAngular(); 
 
    }); 
 

 
    it('Should click Get started button and navigate to new page', function() { 
 
    //Button click 
 
    angularpage.clickgetStartedBtn(); 
 

 
    //Wait for page to load and verify the url 
 
    browser.wait(function() { 
 
     return browser.driver.getCurrentUrl().then(function(url) { 
 
     return (/latest/).test(url); 
 
     }); 
 
    }); 
 

 
    //Verify Page title from common page objects 
 
    commonUtils.getTitle(function(text) { 
 
     expect(text).toEqual('One framework. - Angular'); 
 
    }); 
 
    }); 
 
});
を提出するために、あなた describe()beforeAll()は、あなたがこのような何かを取得します

+0

お返事ありがとうございます。しかし、すべてのナビゲーションがテストスイート全体の1回だけで済むようにしたいのですか? beforeEach(browser.get)は、毎回、そしてit()ブロックごとにページを読み込むことを意味します。 –

+0

その後、[ジャスミンのドキュメント](https://jasmine.github.io/2.0/introduction.html#section-Setup_and_Teardown);-)を確認してください。しかし、beforeAll()はあなたがジャスミン2.1 – wswebcreation

+0

ありがとうBeforeAll()は魅力的に働いた! @wswebcreation –

関連する問題