我必须为一个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);
}
答案 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';");
};
应用这个概念可能会有一些方法,但上面对我有用。