2016-09-13 9 views
0

Picture of tested code/Picture of working signature Здравствуйте, я использую behat с драйвером селена, интегрированным с норкой, и я пытаюсь написать тест, который вводит поддельную подпись. Мы используем мышь, чтобы нарисовать подпись на экране, чтобы я мог сделать селен для меня. Я попытался захватить идентификатор поля и использовать dragTo («другой элемент на моей странице»), но он только нажимает внутри поля подписи и ничего не делает.Как сделать поддельную подпись с behat

Рамка, которую я использую, является 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);

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

+0

Какие рамки являются разработчики, используя для функции подписи? это холст, основанный на jQuery, или что-то еще? – lauda

+0

Ahh ok, да, мы используем SuerSignature.js, их сайт www.SuperSignature.com. –

ответ

0

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

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

переменная сценария $ является строка, которая может содержать такой скрипт:

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); 
 
    }

+0

Ответ на это в оригинальном вопросе, спасибо. –

+0

Таким образом, я могу заставить его писать на экране, но он не принимает его как подпись. Кажется, это требует, чтобы это было событие мыши, чтобы принять подпись. –

+0

ОК, тогда это может сработать, если событие onmousedown является триггером, я попробую несколько вещей – lauda

 Смежные вопросы

  • Нет связанных вопросов^_^