2016-09-13 11 views
0

Picture of tested code/Picture of working signature 안녕하세요 저는 밍크와 통합 셀렌 드라이버와 함께 behat를 사용하고 가짜 서명을 입력 테스트를 작성하려고합니다. 우리는 마우스를 사용하여 화면에 서명을 그려 셀레늄이 나를 위해 그렇게 할 수 있기를 원합니다. 나는 필드의 ID를 잡고 dragTo ('내 페이지의 다른 요소')를 사용하여 시도했지만 서명 상자 안쪽을 클릭 만하면 아무것도하지 않습니다.어떻게 내가 behat와 가짜 서명을 만들까요

내가 사용하고있는 프레임 워크는 laravel for 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를 전송,

응답 해 주셔서 감사합니다하지만이 코드를 실행하면 나는 오류가 발생합니다. 문자열 내부에서 사용하려고하면 예상치 못한 토큰을 말하는 또 다른 오류가 발생합니다.

+0

? jQuery 기반 캔버스 또는 다른 무엇입니까? – lauda

+0

Ahh ok, 예, 우리는 SuerSignature.js를 사용하고 있습니다. 그들의 웹 사이트는 www.SuperSignature.com입니다. –

답변

0

해결책은 evaluateScript 또는 executeScript로 실행할 수있는 자바 스크립트를 사용하는 것입니다. 당신이 변수를 사용하여 추첨의 값을 변경할 수 있습니다 필요한 경우

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

:

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

는 $ 스크립트 변수

같은 스크립트를 포함 할 수있는 문자열입니다.

브라우저에서 테스트되었으므로 캔버스가있는 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 이벤트 트리거를 사용해보십시오. DEVS가 서명 기능을 위해 사용하고있는 프레임 워크

/** 
 
    * @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