我正在使用Protractor进行端到端测试.我正在处理的应用程序的一部分首先使用ng-switch语句在注册过程中显示/隐藏问题,一次一个.问题之间有动画给了我最难的时间.例如,尝试加载页面 - >转到下一个问题 - >断言元素存在很难,等等.该脚本将加载页面,单击下一个按钮,然后在屏幕上显示下一张幻灯片之前进行断言.
更糟糕的是,在问题之间大约半秒钟,旧问题和新问题都存在于DOM上.我能想到的最好的非睡眠等待机制是做一个browser.wait(),它首先等待DOM上有两个问题,然后链接另一个browser.wait()等待那里只有一个再次询问DOM,然后从那里开始.(整个操作包含在代码中的registerPage.waitForTransition()中)
browser.wait()s并不总是阻塞足够长的时间,所以我最终编写了如下所示的代码:
it('moves to previous question after clicking previous link', function() {
var title;
// Get the current slide title, then click previous, wait for transition,
// then check the title again to make sure it changed
registerPage.slideTitle.getText()
.then(function(text) {
title = text;
})
.then(registerPage.prevLink.click())
.then(registerPage.waitForTransition())
.then(function() {
expect(registerPage.slideTitle.getText()).not.toBe(title);
});
});
Run Code Online (Sandbox Code Playgroud)
为了确保在执行下一个命令之前正确完成每个等待.现在这完美无缺.之前发生的事情是,测试将在95%的时间内成功,但在转换实际上已完成100%之前,偶尔会触发断言或下一次点击操作等.这种情况不再发生了,但我觉得这几乎是在承诺上过度使用.then().但与此同时,迫使一切顺序发生是有道理的,因为这与网站的交互实际上是如何运作的.加载页面,然后等待下一个按钮滑入,然后进行选择,然后单击下一个按钮,然后等待下一张幻灯片等.
我是在一个完全糟糕的练习风格中这样做的,还是在一个动画效率很高的应用上使用Protractor时这是否可以接受使用承诺?
我有一个 ionic 1 应用程序,它使用 $cordovaCamera 从用户那里检索照片。奇怪的是,在打开相机后(无论用户是拍照、取消还是从库中选择一张都没有关系),一旦关闭,应用程序就会错误地呈现。状态栏覆盖视图顶部,视图底部溢出视口。但是,如果您重新定向设备(从纵向变为横向),它将自行修复。
有没有办法强制应用程序手动重新绘制?
关于错误本身的额外信息:我单独创建了一个新的 ionic 1 应用程序并完全复制了相机代码,它没有相同的问题。相同版本的 ionic、angular、ngCordova 和相机插件。所以我相信实际的渲染问题特定于我的应用程序。然而,经过一整天的胡闹,我终生无法弄清楚发生了什么。