Изображение проверенного кода / Изображение рабочей подписи Привет, я использую 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. Если я пытаюсь использовать внутри строки, он отправляет другую ошибку, говоря о неожиданном токене
Решение заключалось бы в использовании 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); }