У меня есть сайт на базе ReactJS, который я хочу программно программировать. В основном рабочий цикл зацикливается:Имитация щелчка на динамически добавленном элементе с ванильным JavaScript
- Нажмите на элемент 1.
- Код веб-страницы динамически изменен, в течение которого добавлен элемент Element2.
- Нажмите на элемент 2.
И т.д., пока, после нажатия на ElementN, веб-страница не вернется в исходное состояние, а элемент Element1 снова отобразится. Нажатие на эти элементы - это то, что я хочу автоматизировать с самого сайта.
У меня есть доступ к файлу JS, который отвечает за создание и изменение содержимого веб-сайта. Я могу найти код, который описывает элементы, которые меня интересуют, и при необходимости добавить дополнительных прослушивателей событий.
Я почти совершенно не знаком с клиентской разработкой, поэтому мой подход к решению этой задачи является чисто интуитивным. До сих пор моя идея заключалась в том, чтобы добавить прослушиватель событий для какого-то события «onAdded», которое будет срабатывать, когда элемент будет добавлен в DOM, и из этого прослушивателя вызовите прослушиватель «onclick» (или отправьте событие «щелчок» в каком-то другом путь). Однако я не могу найти никаких событий, которые указывали бы на добавление дерева DOM.
Таким образом, строго говоря, у меня есть два вопроса:
- описанный подход выше жизнеспособными (и адекватный)? Если да, то как именно я это выполню?
- Если я делаю все неправильно, то каков был бы правильный способ выполнить мою задачу?
Edit 1
По предложению Мэтью Хербста, я посмотрел в React методы управления жизненным циклом, как componentDidMount
. Оказывается, элементы, которые я хочу автоматизировать нажатием, не являются независимыми компонентами React, но содержимое другого компонента добавлено внутри метода render
с огромной цепочкой звонков createElement
.
Так что теперь проблема переключается с обнаружения момента, когда конкретный элемент добавляется в структуру DOM, чтобы найти способ взаимодействия с ним.
Простой (и некрасиво) способ сделать это, так как я в настоящее время увидеть его, чтобы использовать window
объект из componentDidMount
, найдите элемент, Я хочу щелкнуть его атрибутом data-reactid
(который является строка разделенных точками цифр который, как я могу сказать, генерируется динамически и отражает иерархию элементов), а затем отправляет требуемое событие DOM.
Возможно, это сработает, но если структура документа изменится, то значения data-reactid
затем снова сломаются. Я бы предпочел как-то правильно отправить событие React's onClick
, но я не знаю, как это сделать. Я попытался вызвать функцию, которая передается методу createElement
в качестве значения свойства onClick
от componentDidMount
, но по какой-то причине он не работает.
Я также пробовал метод взаимодействия с DOM, описанный в this article, но в моем случае объект ReactDOM
, похоже, не определен.
Поскольку я не являюсь разработчиком на стороне клиента, особенно не гуру React, я действительно не вижу всей картины того, как работает клиентская логика веб-сайта, и код, с которым я работаю, быть минифицированным/обфускационным, чтобы сделать его еще более трудным. Поэтому, если бы кто-нибудь мог предложить какие-либо конкретные предложения, не отправив меня прочитать всю документацию React, я был бы благодарен.
Поскольку ваше приложение является React, вы должны быть очень заинтересованы в ['componentDidMount'] (https://facebook.github.io/react/docs/component-specs.html#mounting-componentdidmount) и [' componentDidUpdate '] (https://facebook.github.io/react/docs/component-specs.html#updating-componentdidupdate) методы жизненного цикла. –
Все это может управляться государством. нажмите на элемент1 setState, данные изменились, потому что изменения состояния, которые делают элемент2 нажатием на этот setState, и цикл продолжается –
@MatthewHerbst, спасибо за ваши предложения. Следуя по этому пути, я переформулировал свой первоначальный вопрос. За подробностями ознакомьтесь с изменениями публикации. – Semisonic