我的测试有时会失败。我非常希望每次都能通过。 它是一个页面,显示一个带有数字气泡的开放图层地图。 当页面打开时,我们点击状态过滤器,然后期望在其中一个气泡中显示某个数字。
错误是: NoSuchElementError:没有这样的元素。
它没有说明它找不到哪个元素。 当我看截图时,我可以看到它从未点击过滤器复选框。或至少在屏幕截图中没有显示。 (当测试通过时,它会显示单击的复选框)
这是测试代码:
beforeEach(function() {
ptor = protractor.getInstance();
ptor.ignoreSynchronization = true;
});
function waitForMap(){
ptor.wait(function () {
return element(by.css('label[for="checkbox-status-all"]')).isPresent();
}, 5000);
}
it('should click checkbox and expect 30 to be shown in bubble', function () {
browser.get(ptor.params.testurl).then(function () {
waitForMap();
element(by.css('label[for="checkbox-status-b0"]')).click();
var bedscount = ptor.findElement(protractor.By.id('marker_10'));
expect(bedscount.getInnerHtml()).toEqual('<span>30</span>');
});
});
答案 0 :(得分:1)
如果页面确实是Angular页面,则删除此行:
ptor.ignoreSynchronization = true;
所以Protractor可以正常等待。
您不需要ptor = protractor.getInstance()
使用最新版本的量角器,只需开始使用browser
代替ptor
我还会拆分测试步骤,而不是在一个it()
块内做太多。它有助于日志和调试问题,如我的测试在哪里破解?。
// TODO: Move to page object file
var mapElm = $('label[for="checkbox-status-all"]');
var chkElm = $('label[for="checkbox-status-b0"]');
var bedscountElm = $('#marker_10 span');
// A more general function to wait for elements on non-angular pages
function waitForElmPresent(elmFinder) {
browser.wait(function() {
return elmFinder.isPresent();
}, 5000);
}
it('opens the test page', function() {
browser.get(browser.params.testurl);
});
it('waits for the map', function() {
// shouldn't be necessary with ignoreSyncronization is left alone
waitForElmPresent(mapElm);
});
it('also waits for the checkbox before clicking', function() {
// shouldn't be necessary with ignoreSyncronization is left alone
waitForElmPresent(chkElm);
});
it('clicks the checkbox', function() {
chkElm.click();
});
it('and also waits for the bubble to be present', function() {
// shouldn't be necessary with ignoreSyncronization is left alone
waitForElmPresent(bedscountElm);
});
it('expect 30 to be shown in bubble', function() {
expect(bedscountElm.getText()).toEqual('30');
});