в своем приложении я хотел бы протестировать свою форму Stripe, созданную с помощью Stripe Elements. Итак, я хочу заполнить форму с помощью Panther (https://github.com/symfony/panther), но это кажется совершенно невозможным.
Вот пример формы Stripe: https://stripe.dev/elements-examples/
Например, если я хочу автоматически заполнить поле, соответствующее номеру карты (в 1-м примере это поле ввода с именем «номер карты»), я попробовал две вещи:
$crawler->filter("input[name=cardnumber]")->sendKeys("4242 4242 4242 4242");
или же
$this->client->getWebDriver()->findElement(WebDriverBy::name('cardnumber'))->sendKeys("4242 4242 4242 4242");
Это возвращает мне следующую ошибку:
Facebook\WebDriver\Exception\NoSuchElementException : no such element: Unable to locate element: {"method":"css selector","selector":"[name='cardnumber']"}
Итак, я попытался запустить строку javascript:
$this->client->executeScript("$('input[name=cardnumber]').value = '4242 4242 4242 4242'");
Ничего не принесло.
В результате я полностью заблокирован и не знаю, как решить эту проблему.
Фактически проблема возникает из-за того, что полоса генерирует фреймы для каждого поля. Поэтому я должен ввести эти кадры, чтобы иметь возможность вводить входы. Но это кажется сложным, потому что iframe поступают с другого хоста, и поэтому похоже, что он не работает должным образом. В остальном да, дождался корректной загрузки полосы :)




Я не знаком с пантерой, но пробовали ли вы добавить интервал, который проверяет, существует ли элемент, и запускает строку, только если / когда это происходит? Stripe требуется некоторое время для загрузки, поэтому этот элемент, вероятно, вообще не существует, когда вы запускаете свою строку.