【问题标题】:Protractor Test Scripts are executing faster than the page load量角器测试脚本的执行速度比页面加载速度快
【发布时间】:2017-06-26 15:44:36
【问题描述】:

我正在自动化一个具有登录功能的 Angular js 网站。我只想点击登录链接并输入用户名和密码。但不知何故,我的脚本执行得比页面加载快。请告诉我如何处理这个问题: 我的登录页面对象是:

'use strict'
// Normal Login 
require('../page-objects/loginPage.js');
var customerPortalHome = function () {

    this.clickSignIn = function () {
        browser.sleep(5000);
        element(by.linkText('Sign In')).click();
        browser.waitForAngular();
        browser.sleep(2000);
        return require('./loginPage.js');

    }

}


module.exports = new customerPortalHome();

我的测试规范是;

var co = require('co');
var UI = require('./ui.js');
var ui = new UI();
var CustomerPage = require('../page-objects/customerPortalHome.js')

describe(" Smoke Test Login to the application", function () {

        it("test", co.wrap(function* () {
            var EC = protractor.ExpectedConditions;
             browser.get(ui.createStartLink());
            expect(browser.getTitle()).toContain("Portal");
            // Verify if user is able to Login into the application
            var loginPage =  CustomerPage.clickSignIn();
            loginPage.switchToFrame('account-sdk');
            var reportPage = loginPage.clickLogin('$$$$$@gmail.com', '$$$$$');
            expect(browser.getCurrentUrl()).toContain('reports');
            reportPage.clickSignOut();
            expect(browser.getCurrentUrl()).toContain("?signout");
            browser.sleep(800);
        }));

    }); 

每当我执行测试时,浏览器都会打开一秒钟然后关闭。

我的 Onprepare 方法如下所示:

beforeLaunch: function () {
        return new Promise(function (resolve) {
            reporter.beforeLaunch(resolve);
        });
    },
    onPrepare: function () {
        browser.manage().timeouts().implicitlyWait(5000);

        afterEach(co.wrap(function* () {
            var remote = require('protractor/node_modules/selenium-webdriver/remote');
            browser.driver.setFileDetector(new remote.FileDetector());



        }));

【问题讨论】:

  • 是的,Protractor 使用 Angular 的速度很快。如果我们需要减慢它的速度,我们可以使用睡眠。

标签: javascript angularjs selenium selenium-webdriver protractor


【解决方案1】:

使用浏览器睡眠从来都不是一个好主意,最好的办法是等待一个元素并使用 then 函数来这样做。

element(by.xpath("xpath")).click().then(function(){
      var list = element(by.id('id'));
      var until = protractor.ExpectedConditions;
      browser.wait(until.presenceOf(list), 80000, 'Message: took too long');
    });

【讨论】:

  • HI Acid....是的...但我想知道为什么我的隐式等待不起作用...
  • 貌似你换框架了.. 换框架后可以实现上述方案吗?
【解决方案2】:
browser.wait(protractor.ExpectedConditions.visibilityOf($$('.desk-sidebar > li').get(num-1)), 60000);

通常,我用这个等待。

【讨论】:

    【解决方案3】:

    您是否使用了 ignoreSynchronisation 而没有将 false 放在页面对象帮助器中的某处?

    小心,当有很多重定向时,登录有时会破坏 waitForAngular。我最终在记录时使用脏睡眠来等待页面加载(没有找到其他解决方案,ignoreSync,EC 用于更改 url 并等待元素都不是工作解决方案)。

    你也应该分享你得到的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-03
      • 2019-02-17
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多