我有一个实现 Canvas 标签的 Web 应用程序。在一个画布部分内有多个按钮和其他元素。我想使用 Selenium WebDriver 单击该画布标签内的按钮,但无法使用检查元素、selenium IDE 或 Firepath 等找到定位器(id、xpath 等)。即使我也无法在画布标签内看到任何其他标签。
有什么方法可以获取canvas标签内元素的定位器,或者有什么方法可以使用Selenium WebDriver与这些元素进行交互?
画布标签:
<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"/>
您是否尝试在 xpath 中使用父标签?由于在一个画布部分内有多个按钮,您可以尝试
/parent::*[canvas attributehere]/parent::*[another-canvas attribute here]
.. 等等,直到获得特定元素
一种解决方案是使用 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();
也许这个 Java 教程对某人有帮助,这是基本代码来自它:
var canvas_dimensions = canvas.getSize();
int canvas_center_x = canvas_dimensions.getWidth() / 2;
int canvas_center_y = canvas_dimensions.getHeight() / 2;
int button_x = (canvas_center_x / 3) * 2;
int button_y = (canvas_center_y / 3) * 2;
// Click button on the canvas
new Actions(driver)
.moveToElement(canvas, button_x, button_y)
.click()
.perform();