如何用Vaadin TestBench获取Canvas元素定位器及依赖缺失问题求助
解决Vaadin 7 + OpenLayers 3 TestBench测试的两个问题
我来帮你梳理下遇到的这两个测试难题,都是Vaadin结合OpenLayers时的典型问题:
1. org.vaadin.addon.vol3.OLMapElement类缺失的问题
这个类是Vaadin OpenLayers 3 addon对应的TestBench元素封装类,它通常不会包含在addon的核心依赖包中,也很少会发布到公共Maven中央仓库。你可以按照以下思路解决:
- 首先,确认你使用的是Vaadin OpenLayers 3 Addon,这个addon的TestBench相关代码一般放在项目的
test模块或者单独的扩展模块里。你可以去addon的源码仓库找到对应的测试模块,把OLMapElement类的代码复制到你的测试项目中直接使用。 - 检查addon版本与Vaadin 7、TestBench版本的兼容性:Vaadin 7对应的TestBench版本应该是4.x系列,确保三者版本匹配,避免因版本不兼容导致的类缺失问题。
- 如果找不到现成的类,你也可以自己封装一个简单的OLMapElement,继承Vaadin TestBench的
AbstractComponentElement,基础的地图操作可以通过执行JavaScript来实现。
2. Canvas点击返回相同定位器的问题
因为OpenLayers的地图元素是绘制在单个Canvas DOM元素上的,TestBench默认只能识别整个Canvas,无法区分Canvas内部的绘制元素。你需要结合OpenLayers的JS API来实现精准点击:
- 步骤一:通过JavaScript获取目标元素的屏幕坐标
你可以使用Vaadin的JavaScript类执行OpenLayers的API代码,拿到地图上目标feature的像素坐标,示例代码如下:// 执行JS获取目标元素的像素坐标 JsonArray pixel = (JsonArray) JavaScript.eval("" + "var map = window.olMaps.get('orgvaadinaddonvol3OLMap1'); " + "var feature = map.getLayers().item(0).getSource().getFeatures()[0]; " + "var pixel = map.getPixelFromCoordinate(feature.getGeometry().getCoordinates()); " + "return [pixel[0], pixel[1]];"); int x = pixel.get(0).asInt(); int y = pixel.get(1).asInt(); - 步骤二:定位Canvas元素并点击指定坐标
找到Canvas元素后,调用TestBench的click(x, y)方法实现精准点击:CanvasElement canvas = $(CanvasElement.class).first(); canvas.click(x, y); - 注意:如果你的地图有缩放、平移操作,需要确保执行JS时的地图状态和测试时一致,否则坐标会不准确。
内容的提问来源于stack exchange,提问作者RamanaMuttana
相关产品推荐
相关产品推荐

