Вы можете использовать альтернативную команду «содержащий»,
cy.contains('#feed_header_id', 'אביזרי');
Причина в том, что cy.get(...).contains(...)
не ожидает асинхронного содержимого .
Часть get()
имеет автоматическую повторную попытку, но селектор идентификатора жестко задан в вашем html, поэтому get()
выполняется немедленно (до того, как xhr вернет свое значение), затем элемент проверяется на содержимое (которое изначально пусто).
Приведенный выше альтернативный синтаксис применяет автоматическую повторную попытку как к селектору, так и к содержимому.
Вот быстрый тест, который я использовал, чтобы убедиться, что он не из-за особенностей языка RTL.
Spec - содержит-rtl.js
describe('contains', () => {
it('waits for content', () => {
cy.visit('app/hebrew-calendar.html').then(x => console.log('x', x))
// cy.get('h1#feed_header_id').contains('כ״ט בְּאִיָּר תשע״א');
cy.contains('h1#feed_header_id', 'כ״ט בְּאִיָּר תשע״א');
})
})
Пример страницы - hebrew-calendar.html
<h1 id="feed_header_id"></h1>
<script>
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://www.hebcal.com/converter/?cfg=json&gy=2011&gm=6&gd=2&g2h=1', true);
xhr.onload = function () {
const hebrewDate = JSON.parse(xhr.response).hebrew;
const el = document.querySelector('h1#feed_header_id');
el.textContent = hebrewDate;
};
xhr.send(null);
</script>