Как я могу сделать поддельную подпись с behat

Изображение проверенного кода / Изображение рабочей подписи Привет, я использую behat с драйвером selenium, интегрированным с норкой, и я пытаюсь написать тест, который вводит поддельную подпись. Мы используем мышь, чтобы нарисовать подпись на экране, чтобы я мог сделать селен для меня. Я попытался захватить идентификатор поля и использовать dragTo («другой элемент на моей странице»), но он только нажимает внутри поля подписи и ничего не делает.

Рамка, которую я использую, является laravel для php.

$field = $this->getSession()->getPage()->findById('ctlSignature); $field->dragTo('another id on my page'); 

Это не работает.

Если я могу сказать мыши щелкнуть, то переместите 10 пикселей вправо, затем щелкните еще раз, что было бы идеально, поскольку я могу использовать это, чтобы нарисовать подпись.


Спасибо за ответ, но когда я запускаю этот код, я получаю сообщение об ошибке,

 $script = "var c = document.querySelector('#ctlSignature'); var ctx = c.getContext('2d'); ctx.moveTo(20,20); ctx.lineTo(50,50); ctx.stroke()"; $this->getSession()->evaluateScript($script); 

Отправляет сообщение об ошибке Неожиданный токен var. Если я пытаюсь использовать внутри строки, он отправляет другую ошибку, говоря о неожиданном токене

Solutions Collecting From Web of "Как я могу сделать поддельную подпись с behat"

Решение заключалось бы в использовании javascript, который вы можете выполнить с помощьюScript или executeScript.

 $this->getSession()->evaluateScript($script); 

$ Script variable – это строка, которая может содержать скрипт вроде:

 var c = document.querySelector("canvas"); var ctx = c.getContext("2d"); ctx.moveTo(20,20); ctx.lineTo(50,50); ctx.stroke(); 

При необходимости вы можете изменить значения ничьей, используя переменные.

Протестировано в браузере, чтобы оно работало, что нужно сделать, чтобы переключиться на iframe, который содержит холст, если таковой имеется.

См. Следующий шаг с тем же скриптом, но слегка изменившийся для записи текста:

 /** * @Then /^signature test$/ */ public function signatureTest(){ $script = 'var c = document.querySelector("canvas"); var ctx = c.getContext("2d"); ctx.fillStyle = "black"; ctx.font = "20px Georgia"; ctx.fillText("automation user",10,90);'; $this->getSession()->executeScript($script); } 

Убедитесь, что выбранный селектор выберет тип элемента холста.

Вторая версия, попробуйте mousedown event trigger.

  /** * @Then /^signature test$/ */ public function signatureTest(){ $function = <<<JS (function(){ var c = document.querySelector("canvas"); event = document.createEvent('MouseEvent'); event.initEvent('mousedown', true, true); var ctx = c.getContext("2d"); ctx.fillStyle = "black"; ctx.font = "20px Georgia"; ctx.fillText("automation user",10,90); c.dispatchEvent(event); })() JS; $this->getSession()->executeScript($function); }