#javascript #reactjs #automated-tests
#javascript #reactjs #автоматизированные тесты
Вопрос:
Есть ли способ убедиться, что веб-страница, закодированная в React, завершила загрузку? Обычные приемы javascript, похоже, не работают для React, что означает, что вы не можете безопасно использовать эти:
document.readyState == ‘complete’ amp;amp; jQuery.active == 0
Мы работаем над автоматическими тестами, и из-за этого у нас нет доступа к коду на стороне клиента, Поэтому мы не можем или должны создавать обратные вызовы и т. Д., Чтобы получить нужную нам информацию. Самый простой способ — использовать режим сна потока, но это очень ненадежная, разочаровывающая и плохая практика. Есть ли другой способ, например, выполнение js-скрипта, который вернет такую информацию?
Комментарии:
1. Каким образом вы зависите от полной загрузки страницы?
Ответ №1:
На всякий случай, если кому-то это нужно…
Приведенный ниже подход лучше всего подходит для решения вашей проблемы.
function Component() {
const [loaded, setStatus] = useState(false);
document.onreadystatechange = () => {
setStatus(document.readyState === "complete");
}
return {loaded ? <Loaded />: <Loading />};
}
Ответ №2:
Использование нового API useEffect в сочетании с useState может помочь вам достичь того, чего вы хотите,
Что-то вроде следующего:
Внутри вашего функционального компонента:
function yourComponent() {
const [isLoading, setLoader] = useState(true)
useEffect(() => {
// Here you can access your API to get the Network state instead on document ready
setLoader(document.readyState == 'complete' amp;amp; jQuery.active == 0)
}, [])
return (
<div>
{isLoading amp;amp; <Loader />}
{!isLoading amp;amp; <OtherComponent />}
</div>
)}
затем вы можете использовать состояние загрузки, чтобы отобразить загрузчик в вашей части JSX и скрыть его, если состояние чтения изменится
Комментарии:
1. У меня нет доступа к функциональным компонентам, чтобы сделать это. Мы не создаем код, а тестируем его
2. это тестирование end2end, поэтому мы используем java с webdriver