Intereting Posts
Прочитайте URL-адрес CSV и импортируйте выбранные данные в mysql с помощью PHP AMQPRuntimeException: ошибка чтения данных. Получено 0 вместо ожидаемых 7 байт Создание пользовательской панели выполнения загрузки JQuery Expand Table – добавление дополнительных столбцов jquery validate и php captcha issue Отправлять уведомление по электронной почте при изменении статуса заказа от ожидающего до отмены Как остановить выполнение кода PHP? Плагин проверки jQuery с обработчиком ajax submit не работает Как сделать Aptana отображает цвета Laravel в файлах .php (поддержка Laravel)? Обтекание строк текста в границах изображения с помощью gd Выравнивание ларавелла неправильно вызвано несколькими встроенными css и внешними css в одном файле клипа Является ли это доказательством инжекции запроса? Paypal API Express Checkout в PHP Код ошибки платежа 13113 Плагин wordpress: запрос после ID в плагине? Многомерный массив, найдите элемент и перейдите в начало?

Выбранный узел не имеет предка формы – ошибка Mink

Я пытаюсь выполнить тесты на моей установке Magento с использованием Mink с драйвером Goutte, и это не удается, когда я пытаюсь использовать функции click() или press() на кнопке.

Код:

 $page = $this->getSession()->getPage(); $checkout = $page->find('css', '.btn-proceed-checkout'); $checkout->click(); 

Как получить эту работу? Почему Минке нужна форма, чтобы щелкнуть элемент кнопки? Или проблема связана с тем, что Goutte не может получить JS?

Solutions Collecting From Web of "Выбранный узел не имеет предка формы – ошибка Mink"

TL; DR: используйте другой драйвер или убедитесь, что элементы формы находятся внутри формы.

Драйвер Goutte довольно потрясающий, но не такой потрясающий, как настоящий браузер. Он получает контент ответа и использует Grapte scrapper для его анализа. Чтобы добавить некоторую специю при тестировании, она позволяет вводить и отправлять данные формы, перехватывая вызовы настройки значений и сохраняя данные формы в объекте. Когда вы нажимаете кнопку (я предполагаю только на type="submit" ), данные формы добавляются в данные запроса и отправляются на сервер.

Чтобы создать этот объект формы, он ищет самую близкую родительскую форму для получения основных деталей формы. Таким образом, когда вы пытаетесь установить значение на входе, которое не является частью формы, или сделать submit без формы – он не может найти форму и выдает исключение.

Обеспечение того, чтобы элементы формы располагались внутри тега формы, должны решить такие проблемы. В качестве альтернативы вы можете использовать драйвер Selenium2 – он использует совершенно другой механизм.

Проблема в DOM. Мне удалось отладить, поместив <button> ближе к <form> в дереве DOM.

В моем случае проблема заключалась в том, что некоторые <script> блоки (угловые шаблоны) внутри <form> .