量角器 - 如何处理动画严重的网站?

时间:2015-08-19 14:12:55

标签: javascript angularjs protractor mocha

我必须为一个Angular应用程序的网站编写测试,并且有大量的动画。几乎所有东西都有一个" mini"窗口从顶部滑入并进入中心,然后其内容从右侧进入,直到它们进入,依此类推。

这打破了我的测试,很多。量角器看到元素,因为它们被显示但是它们无法点击它们,因为它们正在移动并且它抛出一个错误,说其他元素将接收到点击。这种情况经常发生,我不知道如何处理它(除了使用browser.sleep(xxxx))。

除了使用睡眠功能外,有没有解决方法?如果我真的没有其他选择,我必须在第二排使用它......

**我试过这个browser.manage().timeouts().implicitlyWait(30000);并没有帮助。

P.S。我也有一些案例,其中量角器试图在元素可见之前点击它。

如果需要,我可以制作一个简短的视频来展示动画是什么。

test.describe('Profile tests: ', function(){
this.timeout(0);

test.before(function(){
    browser.get('......');
});

test.it('Change Username', function() {
    var newUsername = 'Sumuser';

    welcome.continueLink.click();  
    bonus.takeBonus.isDisplayed().then(function() {                
        bonus.takeBonus.click();            
    });
    entrance.openEntrance.click();

    browser.sleep(300);
    loginBasic.openNormalLogin.isDisplayed().then(function() {
        loginBasic.openNormalLogin.click();
    });

    browser.sleep(300);
    login.usernameField.isDisplayed().then(function() {
        login.usernameField.sendKeys(username);
    });

    login.passwordField.sendKeys(password);
    login.loginButton.click();
    infoBar.avatar.click();

    browser.sleep(1000);
    myProfile.editProfileButton.click();

    browser.sleep(1000);
    username.field.clear();
    username.field.sendKeys(newUsername);
    editProfileButtons.saveChanges.click();

    browser.sleep(1000);
    myProfile.username.getText().then(function (text){
        expect(text).to.equal(newUsername);
    });
});
});

我还尝试在配置文件中添加以下内容以禁用动画:

onPrepare: function() {
    var disableNgAnimate = function() {
        angular.module('disableNgAnimate', []).run(['$animate', function($animate) {
            $animate.enabled(false);
        }]);
    };

    browser.addMockModule('disableNgAnimate', disableNgAnimate);
}

2 个答案:

答案 0 :(得分:8)

使用browser.wait()进行显式等待可能会使测试更加可靠。

例如,等待元素变为可点击:

var EC = protractor.ExpectedConditions;
var elm = element(by.css(".myclass"));

browser.wait(EC.elementToBeClickable(elm), 5000);

您也可以完全关闭角度动画,请参阅:

答案 1 :(得分:4)

我刚刚添加了一个您可能觉得有用的How to disable animations in protractor for angular js appliction答案 - 禁用css转换。

为方便起见,我将在此处重复重要的代码。我在我的一个样式表中添加了一个类,如:

.notransition * {
  -webkit-transition: none !important;
  -moz-transition: none !important;
  -o-transition: none !important;
  -ms-transition: none !important;
  transition: none !important;
}

......在量角器中,我有类似的东西:

_self.disableCssAnimations = function() {
  return browser.executeScript("document.body.className += ' notransition';");
};

应用这个概念可能会有一些方法,但上面对我有用。