量角器测试的执行顺序

时间:2016-05-18 16:53:54

标签: angularjs testing protractor

哪种方法可以控制量角器测试的执行顺序?

问题案例1:量角器快速滑动角度页面以至于无法操纵(填充)输入数据。 (滑动逻辑是从不可见转换为可见并通过将它们转换为窗口可见区域)。因此量角器无法看到超出窗口的那些并且具有不透明度0.要测试我只能填写第一页。其他人刷得太快(或异步)。

问题案例2:在我填写第一页并提交表格后,数据被保存并且警报显示确认消息。然后量角器必须单击下拉列表,浏览器应导航到显示已保存数据的页面。问题是,由于稍后发出警报,量角器会在保存数据之前单击下拉列表(必须等待警报)。

问题是:有没有办法控制量角器中给定顺序执行的测试?有没有办法按住滑动来填写日期(否则量角器不会看到它)?这是简化的代码:

    it('should fill in form and send data', function() {

            // fill in textarea field
            element.all(by.css('textarea')).first().clear().sendKeys('test');

            // goes to page 2
            browser.executeScript("angular.element(document.documentElement)
.injector().get('$rootScope').$broadcast('nextPage', {direction: 'next'});");

            // Here is Problem 1. Though i can see this page when testing, 
            // the input is not visible for protractor.
            // fill in input-field
            element.all(by.css('input')).first().clear().sendKeys('test');     

           // goes to page 1
            browser.executeScript("angular.element(document.documentElement)
.injector().get('$rootScope').$broadcast('prevPage', {direction: 'prev'});");


            // submit form
            element(by.css('button[type=submit]')).click();

            // Here is problem 2. The following test is executed earlier
            // than the following alert.
            //browser.wait(protractor.ExpectedConditions.alertIsPresent(), 3000);
            var alertDialog = browser.switchTo().alert();
            expect(alertDialog.getText()).toEqual('Saved');
            alertDialog.accept();

        });


it('should click drop-down-list', function() {
    // click drop-down list
    element(by.css('.drop-down-list')).click();
});

1 个答案:

答案 0 :(得分:0)

我个人认为browser.sleep(5000)应解决第二个问题。

如果没有,你可以尝试使用promisies

 element(by.css('button[type=submit]')).click().then(function(){
  var alertDialog = browser.switchTo().alert();
  expect(alertDialog.getText()).toEqual('Saved');
  alertDialog.accept();
});

这应该等待承诺得到解决(即点击提交按钮),然后执行里面的代码片段