测试代码的图片 / 工作签名的图片您好,我正在将behat与与貂皮集成的selenium驱动程序一起使用,我正在尝试编写一个输入假签名的测试。我们使用鼠标在屏幕上绘制签名,因此我希望selenium能够为我做到这一点。我尝试获取该字段的ID并使用dragTo(’我页面上的另一个元素’),但它仅在签名框中单击,而没有执行任何其他操作。
我正在使用的框架是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。如果我尝试在字符串中使用它会发送另一个错误,指出意外令牌
解决方案是使用可以与valuateScript或executeScript一起执行的JavaScript。
$this->getSession()->evaluateScript($script);
$ 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事件触发器。
/** * @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); }