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