Наш проект использует TestCafe для тестирования e2e. Из-за среды переход к URL-адресу периодически завершается ошибкой (Ping или другие проблемы). Карантинный режим testCafe не является правильным решением, потому что один успех указывает на успех. Я пытаюсь создать решение, позволяющее автоматическому сценарию повторить попытку, когда правильный URL-адрес не загружается. Я хотел бы реализовать что-то вроде этого оператора ожидания, без ожидания, вызывающего сбой теста, или использования жесткого .wait (30000)
ожидание t.expect (getLocation ()). contains ('/ page', {timeout: 30000});
test('Should login and navigate to desired URL', async t => {
console.log('Login Page');
await login.login('userName', 'password', '/page');
for (let i = 0; i < 3; i++) {
await t.wait(30000);
url = await getUrl();
if (!url.includes('/page')) {
console.log('Retrying Login ' + (i + 1) + ' of 3');
await login.login('userName', 'password', '/page);
// there is a delay before the page loads
// .wait(30000); <== trying to avoid this if possible
// await t.expect(getLocation()).contains('/page', { timeout: 30000}); <== would prefer something like this without the causing a test failure
url = await getUrl();
} else {
console.log('Login Valid');
i = 3;
}
}
console.log('Location Page');
await t.expect(getLocation()).contains('/page', { timeout: 30000});
// ... script continues...
//---------------------------
export async function getUrl() {
const getLocation = ClientFunction(() => document.location.href);
const url = getLocation();
return url;
}
async login(username: string, password: string, endpoint: string) {
let url = await setUrl(environment);
url = url + endpoint;
console.log(url);
await t
.wait(5000)
.navigateTo(url)
.expect(this.userName.exists).ok('username field exists', {timeout: 20000})
.expect(this.userName.hasAttribute( 'disabled')).notOk('username field enabled', {timeout: 20000})
.hover(this.userName)
.typeText(this.userName, username)
// ----
.expect(this.password.exists).ok('password field exists', {timeout: 2000})
.expect(this.password.hasAttribute( 'disabled')).notOk('username field enabled', {timeout: 2000})
.hover(this.password)
.typeText(this.password, password)
// ----
.expect(this.submitBtn.exists).ok('submit button field exists', {timeout: 2000})
.expect(this.submitBtn.hasAttribute( 'disabled')).notOk('username field enabled', {timeout: 2000})
.hover(this.submitBtn)
.click(this.submitBtn);
}
Желаемое решение - трижды повторять попытку входа в систему, прежде чем произойдет сбой.