【问题标题】:Unable to run automated testcases on e2e protractor,Angular 2无法在 e2e 量角器、Angular 2 上运行自动化测试用例
【发布时间】:2018-10-10 11:09:15
【问题描述】:

我正在尝试运行一个简单的测试,但测试失败,因为 Protractor 试图与页面同步,但由于它不在 Angular 中,所以不能。有什么想法需要改变吗?

配置文件:

 exports.config = {
    allScriptsTimeout: 11000,

    specs            : [
     './src/**/*.e2e-spec.ts',
     '/pages/**/*.Tracker_pageobject.ts',   
   ],

    capabilities     : {
        'browserName': 'chrome'
    },
    directConnect    : true,
    baseUrl          : 'http://localhost:4200/',
    useAllAngular2AppRoots: true,
    framework        : 'jasmine',

规格文件:

describe('Test Application', () => {
beforeEach(() => {
    browser.waitForAngularEnabled(false);
    browser.driver.get(environment.url + "/login");
    browser.driver.manage().window().maximize();
    browser.waitForAngularEnabled(true);
});


it('should not open login page when user enters invalid Username & Password', () => {
    var loginpage = new dashboard();
    browser.sleep(2000);
    loginpage.userName('abc');
    browser.sleep(2000);
    loginpage.password('cde');
    loginpage.loginbtn();
    element(by.className('mat-error ng-tns-c33-4 ng-star-inserted')).getText().then(function(value){
      browser.waitForAngular();
      browser.sleep(5000);
      console.log(value);
     });
    browser.sleep(5000);
 });
 it('should not open login page when user enters spaces', () => {
   browser.sleep(5000);
   var loginpage = new dashboard();
   loginpage.userName(' ');
   browser.sleep(2000);
   loginpage.password(' ');
   loginpage.loginbtn();
   element(by.className('mat-error ng-tns-c33-4 ng-star-inserted')).getText().then(function(value){
    browser.waitForAngular();
    browser.sleep(5000);
    console.log(value);
   });
   browser.sleep(5000);
 });

登录页面(POM).ts

import { browser, by, element } from 'protractor';
var loginpage = function(){
var userNamefield = element(by.css("input[formcontrolname = 'email']"));
var passwordfield = element(by.css("input[formcontrolname = 'password']")); 
var loginbutton = element(by.xpath('//*[@id="login-form"]/form/button'));
var logoutbtn = element(by.xpath('//*[@id="main-navigation"]/fuse-nav-vertical-group/div[1]/ul/li[3]/a'));
this.userName = function(vusername){
    userNamefield.sendKeys(vusername);
};

this.password = function(vpassWord){
    passwordfield.sendKeys(vpassWord);
};

 this.loginbtn = function(btn){
     loginbutton.click();
};

收到以下消息: 失败:等待 Protractor 与页面同步时出错:“angularJS 可测试性和 Angular 可测试性都未定义。这可能是因为这是一个非 Angular 页面,也可能是因为您的测试涉及客户端导航,这可能干扰量角器的引导。详情请参阅http://git.io/v4gXM

任何帮助将不胜感激

【问题讨论】:

  • 尽量不启用等待角度,还有为什么你有页面对象类作为测试?
  • 我有一个登录页面作为 POM 和 waitForAngularEnabled() 的任何替代品

标签: angular protractor e2e-testing


【解决方案1】:

从规范中的BeforeEach()block 中删除所有带有browser.waitForAngularEnabled(....); 的行。并将browser.waitForAngularEnabled(false); 添加到protractor.conf 文件中的onPrepare() 部分

【讨论】:

    【解决方案2】:

    更改此块:

    beforeEach(() => {
        browser.waitForAngularEnabled(false);
        browser.driver.get(environment.url + "/login");
        browser.driver.manage().window().maximize();
        browser.waitForAngularEnabled(true);
    });
    

    到这个:

    beforeEach(() => {
        browser.waitForAngularEnabled(false);
        browser.driver.get(environment.url + "/login");
        browser.driver.manage().window().maximize();
    });
    

    您无需等待 Angular。 此外,您可能需要查看 Selenium 中的 Explicit waiters

    【讨论】:

    • 尝试了提到的解决方案,但没有运气仍然得到同样的错误
    • 从量角器配置中删除 useAllAngular2AppRoots。
    • 从规范中的BeforeEach() block 中删除所有带有browser.waitForAngularEnabled(....); 的行。并将browser.waitForAngularEnabled(false); 添加到protractor.conf 文件中的onPrepare() 部分
    • 工作了很多
    • @Shrutika 我会将其作为单独的答案发布。请把它标记为正确。
    猜你喜欢
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多