当画布元素在 Selenium 中没有名称或 ID 时,如何自动执行画布对象上的操作?

软件测试 硒2 网络驱动程序
2022-01-21 21:16:01

我想自动化测试数字签名,这是一个画布元素。

谁能提供我可以使用的示例代码。

我努力了,

selenium.clickAt(),
driver.findElement(By.xpath("/html/body/form/div/canvas")).click();

两者都为我抛出了一个未找到异常的元素...

页面的源代码,适用于 Canvas 区域:

<table>
<tr class="tdbg" valign="middle"  bgcolor="#D4D4D4" height="1px">
<td width="5%" bgcolor="#D4D4D4"></td>
<td width="90%" bgcolor="#D4D4D4">
  <div align="center" id="electronicSignImage">
    <div>Please use mouse to draw your Signature &nbsp;</div>
    <div id="ds" align="center">
      <iframe id="elecsign"  align='middle' style="border:1px #9E9E9E solid;
      padding:10px;" height='180' width='200' scrolling='no'
      src='http://<pdftest.anotherwebsite.com>//signature/index.php?signid=<something>'
      class="required" ></iframe>
      <input type="hidden" name="ds" value="<something">
    </div>
  </div>
</td>
<td width="5%"  bgcolor="#D4D4D4"></td>
</tr>
<tr class="tdbg" valign="middle"  bgcolor="#D4D4D4" >
  <td width="5%" height="1px" bgcolor="#D4D4D4">&nbsp;</td>
  <td  bgcolor="#D4D4D4" height="1px" width="80%" >&nbsp;</td>
  <td width="5%" height="1px" bgcolor="#D4D4D4">&nbsp;</td>
</tr>
</table>

希望这可以帮助!

4个回答

实际上,Canvas 元素是嵌入在 Frame 中的。所以,必须切换到 Frame,然后单击 Canvas!这就是解决方案,对于这个问题......

Selenium 2.28 中的 Canvas 元素显示问题已在 Selenium 2.29 版本中解决。以下代码确实对我有用。driver对象是 Firefox 驱动程序。

Actions actionBuilder=new Actions(driver);          
Action drawOnCanvas=actionBuilder
                .contextClick(wbCanvas)
                .moveToElement(wbCanvas,8,8)
                .clickAndHold(wbCanvas)
                .moveByOffset(120, 120)
                .moveByOffset(60,70)
                .moveByOffset(-140,-140)
                .release(wbCanvas)
                .build();
drawOnCanvas.perform();

绘制 3 个点将创建一个多边形,最后双击结束绘制过程代码如下所述:

WebElement element = driver.findElement(By.xpath("xpath of canvas"));

    Actions builder = new Actions(driver);
    Action drawAction = builder.moveToElement(element,135,15) //start points x axis and y axis. 
              .click()
              .moveByOffset(200, 60) // 2nd points (x1,y1)
              .click()
              .moveByOffset(100, 70)// 3rd points (x2,y2)
              .doubleClick()
              .build();
    drawAction.perform();

由于我是一个懒惰的编码员,我总是用 Selenium IDE 记录我的案例,并找到找到我使用的 WebElements 的最佳方法。

使用“目标”下拉菜单更改您处理它们的方式和“查找”按钮以确保其正常工作。

还要确保使用最新版本的 Selenium/Browser