option.timeout игнорируется в ожидании Selector.withAttribute
Я пробовал это в любом случае, но я не могу заставить TestCafe ждать disabled
атрибут, который будет удален из элемента.
Это, очевидно, блокирует все дальнейшее тестирование, так как мне нужно, чтобы кнопка была кликабельной, прежде чем я смогу продолжить работу.
fixture('create').page('locahost:3000');
test('one', async => {
const myIframe = Selector('#myIframe');
await t
.typeText('#input', 'words')
.click('#update')
.expect(myIframe.exists).ok('', { timeout: 10000 })
.switchToIframe(myIframe)
const activeStartButton = await Selector('#start').withAttribute('disabled');
await t
.expect(activeStartButton).notOk('', { timeout: 60000, allowUnawaitedPromise: true });
});
Независимо от того, определил ли я activeStartButton
заранее или добавить или удалить await
из определения, поместите селектор прямо в expect
с или без ожидания, отделите это await block from the previous one or add it to the previous chain, TestCafe immediately throws an error at
ожидать (activeStartButton).notOk`
Ошибка меняется в зависимости от моего подхода, но для этого кода:
AssertionError: start button remains disabled: expected [Function: __$$clientFunction$$] to be falsy"
2 ответа
Ваш код должен выглядеть так:
const selector = Selector('#start')
.with({visibilityCheck: true});
await t
.expect(selector.exists).ok({timeout: 10000}) // ensure the button is visible on the screen
.hover(selector) // access to the button via the mouse
.expect(selector.hasAttribute("disabled")).notOk({timeout: 10000}) // ensure the field is enabled
.click(selector);
Может быть, вам стоит взглянуть на прощание
Этот код:
const mySelector = Selector('any css selector');
await t
.expect(mySelector).notOk()
всегда будет выдавать ошибку, потому что правдивость mySelector
всегда верно. Таким образом, приведенный выше код похож на этот код:assert(true).toBe(false)
,
Выше mySelector
это объект обещания, и истинность обещания всегда верна.
Теперь, если вы напишите:
const mySelector = await Selector('any css selector');
await t
.expect(mySelector).notOk();
mySelector
это NodeSnaphsot
объект, который является своего рода литеральным объектом с множеством свойств, таких как:
{
textContent,
attributes,
id,
clientHeight,
...
}
Истинность буквального объекта всегда верна, и поэтому expect
все равно выдаст ошибку.
Фактически, эта проблема могла бы быть полностью замаскирована, если бы вместо этого был тестовый код:
const mySelector = await Selector('any css selector');
await t
.expect(mySelector).ok();
Приведенный выше тестовый код всегда будет проходить, даже если mySelector
не представляет какой-либо существующий элемент в DOM.
Внутри ожидаемого вы должны утверждать только для свойства или для метода Selector, который возвращает логическое значение при использовании ok() или notOk().
Возможные логические свойства:
mySelector.hasChildElements
mySelector.hasChildNodes
mySelector.checked
mySelector.focused
mySelector.selected
mySelector.visible
mySelector.exists
Возможные методы:
mySelector.hasClass('className')
mySelector.hasAttribute('attributeName')
`.WithAttribute('attributeName') - это просто метод фильтра, который возвращает объект Selector (т. Е. Promise), и достоверность этого результата всегда верна.
Итак, когда вы пишете:
const mySelector = Selector('any css selector').withAttribute('attributeName');
это более или менее похоже на написание этого псевдокода:
const mySelector = Selector('any css selector') // returns a collection of Selectors
.toArray() // convert it to an array
.filter((selector) => selector.hasAttribute('attributeName'))
.toPromise() // convert back to a promise object