У выбранного узла нет ошибки предка формы - Норки
Я пытаюсь выполнить тесты своей установки Magento с помощью драйвера Mink с Goutte, и это не удается, когда я пытаюсь использовать функции click()
или press()
на кнопке.
Код:
$page = $this->getSession()->getPage();
$checkout = $page->find('css', '.btn-proceed-checkout');
$checkout->click();
Как получить эту работу? Зачем Норку на самом деле нужна форма для нажатия элемента кнопки? Или это проблема, связанная с тем, что Гутте не может получить JS?
2 answers
TL;DR: используйте другой драйвер или убедитесь, что элементы формы действительно находятся внутри формы.
Драйвер Goutte довольно потрясающий, но не такой потрясающий, как настоящий браузер. Он получает содержимое ответа и использует скраппер Goutte для его анализа. Чтобы добавить некоторую пикантность вашему тестированию, он позволяет вводить и отправлять данные формы, перехватывая вызовы настройки значений и сохраняя данные формы в объекте. Когда вы нажимаете на кнопку (я бы предположил, что только на type="submit"
), данные формы добавляются в данные запроса и отправлено на сервер.
Чтобы создать этот объект формы, он ищет ближайшую родительскую форму, чтобы получить основные сведения о форме. Поэтому, когда вы пытаетесь установить значение для ввода, которое не является частью формы, или отправляете запрос без формы – он не может найти форму и выдает исключение.
Обеспечение того, чтобы элементы формы находились внутри тега формы, должно решить такие проблемы. В качестве альтернативы вы можете использовать драйвер Selenium2 – он использует совершенно другой механизм.
Проблема заключается в DOM. Мне удалось выполнить отладку, поместив <button>
ближе к <form>
в дереве DOM.
В моем случае проблема заключалась в некоторых <script>
блоках (угловых шаблонах) внутри <form>
.