Selenium:如何在canvas标签中获取元素的定位器

时间:2014-04-08 07:31:13

标签: selenium selenium-webdriver html5-canvas selenium-ide

我有一个实现Canvas标记的Web应用程序。在一个画布部分内有多个按钮和其他元素。我想使用Selenium WebDriver点击该canvas标签内的按钮,但无法使用inspect元素,selenium IDE或Firepath等找到定位器(id,xpath等)。甚至我无法在canvas标签内看到任何其他标签。 / p>

有没有办法在canvas标签中获取元素的定位器,或者使用Selenium WebDriver与这些元素进行交互?

canvas标签:

<canvas style="padding: 0px; 
               margin: 0px; border: 0px none; 
               background: none repeat scroll 0% 0% transparent; 
               position: absolute; 
               top: 0px; left: 0px; 
               width: 360px; 
               height: 360px;" 
               width="360" height="360"/>

3 个答案:

答案 0 :(得分:1)

您是否尝试在xpath中使用父标记?由于在一个画布部分内有多个按钮,您可以尝试/parent::*[canvas attributehere]/parent::*[another-canvas attribute here] ..依此类推,直到获得特定元素

答案 1 :(得分:0)

一种解决方案是使用x和y坐标。

driver.switchTo().window(frame);
WebElement canvas= driver.findElement(By.id("canvas"));
Actions action2 = new Actions(driver);
action2.moveToElement(canvas, canvas.getLocation().getX()+ELEMENTS_DISTANCE_FROM_CANVAS_X, canvas.getLocation().getY()+ELEMENTS_DISTANCE_FROM_CANVAS_Y).click().build().perform();

答案 2 :(得分:0)

  

但是无法使用inspect元素, Selenium IDE

找到定位器(id,xpath等)

是的。 <canvas>在DOM结构中就像没有任何内容的元素一样出现,即使内部存在复杂的游戏也是如此。

<canvas id="myCanvas" width="200" height="100"></canvas>

仅使用Selenium,您将只能定位元素并获取其位置,大小和某些状态,例如isElementVisible等,但是您将无法查看内部内容并测试内部行为。

我知道两种解决方案:

  1. 使用OpenCV组合硒。 e。对此进行了描述。 G。 here

  2. 如果使用Selenium IDE足够好,请使用 UI.Vision Selenium IDE。它具有 OpenCV内置,并通过visualAssertXClick (image)之类的命令支持UI testing