我有一个实现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"/>
答案 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等,但是您将无法查看内部内容并测试内部行为。
我知道两种解决方案:
使用OpenCV组合硒。 e。对此进行了描述。 G。 here。
如果使用Selenium IDE足够好,请使用 UI.Vision Selenium IDE。它具有 OpenCV内置,并通过visualAssert
和XClick (image)
之类的命令支持UI testing。