У выбранного узла нет ошибки предка формы - Норки


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

Код:

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

Как получить эту работу? Зачем Норку на самом деле нужна форма для нажатия элемента кнопки? Или это проблема, связанная с тем, что Гутте не может получить JS?

Author: NathanOliver, 2014-08-20

2 answers

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

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

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

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

 2
Author: Ian Bytchek, 2014-08-20 10:57:08

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

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

 1
Author: Tiago A., 2015-12-16 14:14:08