我正在使用量角器和ECMAScript 6进行端到端测试。但是当测试完成后,我看到了错误:
Message:
Error: Timeout - Async callback was not invoked within the timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
我尝试了在StackOverflow和GitHub上找到的所有解决方案。例如,将jasmineNodsOption添加到配置文件,将参数添加到测试函数中,将超时添加到函数中无济于事。
test.js
import { doubleClick, isDisplayed, waitToBeVisible } from '../page_objects/base_page';
import HairLossPage from '../page_objects/HairLossPage';
import CartComponent from '../page_objects/components/CartComponent';
/*global expect describe beforeAll it browser*/
describe('Hair-loss. Question pages', () => {
const heirLoss = new HairLossPage();
const cartComponent = new CartComponent();
beforeAll(() => {
browser.waitForAngularEnabled(false);
heirLoss.get();
});
it('Check the "CheckOut" button in the mini-cart with product', () => {
doubleClick(heirLoss.header.card);
waitToBeVisible(cartComponent.header.title);
expect(isDisplayed(cartComponent.header.title)).toBe(true);
expect(isDisplayed(cartComponent.content.shopHair)).toBe(true);
expect(isDisplayed(cartComponent.content.shopEd)).toBe(true);
expect(isDisplayed(cartComponent.content.shopSkin)).toBe(true);
expect(isDisplayed(cartComponent.content.shopDailyHealt)).toBe(true);
});
});
config.js
require("@babel/register");
require("protractor");
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['./src/tests/**.e2e.js'],
multiCapabilities: [{
browserName: 'chrome'
}],
//Global configuration
baseUrl: 'https:/facebook.com/',
//Allure configuration
/*global jasmine browser allure*/
onPrepare: () => {
browser.manage().window().maximize();
var AllureReporter = require('jasmine-allure-reporter');
jasmine.getEnv().addReporter(new AllureReporter());
jasmine.getEnv().afterEach((done) => {
if (done.status === "failed") {
browser.takeScreenshot().then((png) => {
allure.createAttachment('Screenshot', () => new Buffer(png, 'base64'), 'image/png')();
done();
});
}
});
}
};
我以为isDisplayed
和waitToBeVisible
是异步的,并且卡在某处。
尝试:
beforeAll(() => {
console.log('Before waiting for angular enabled');
browser.waitForAngularEnabled(false);
console.log('After waiting for angular enabled, before heirLoss.get');
heirLoss.get();
console.log('After heirLoss.get');
});
it('Check the "CheckOut" button in the mini-cart with product', () => {
console.log('before doubleClick');
doubleClick(heirLoss.header.card);
console.log('after doubleClick, before waitToBeVisible');
waitToBeVisible(cartComponent.header.title);
console.log('after waitToBeVisible, before first isDisplayed');
expect(isDisplayed(cartComponent.header.title)).toBe(true);
console.log('after first isDisplayed, before 2nd isDisplayed');
// keep adding console.log before and after these assertions and see where it gets stuck.
expect(isDisplayed(cartComponent.content.shopHair)).toBe(true);
expect(isDisplayed(cartComponent.content.shopEd)).toBe(true);
expect(isDisplayed(cartComponent.content.shopSkin)).toBe(true);
expect(isDisplayed(cartComponent.content.shopDailyHealt)).toBe(true);
});
一旦了解了卡在哪里,就可以更好地了解为什么卡在这里。