monkeyrunner探讨,如何通过id触发事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了monkeyrunner探讨,如何通过id触发事件相关的知识,希望对你有一定的参考价值。

我看到很多实例代码都是使用touch方法采用坐标的形式来触发一个事件,对于手机上的app能不能通过按钮id来触发一个事件呢?由于一个app在开发过程中UI是很可能会发生改变的,那么坐标就会变动,采用坐标的方式触发事件的话,一旦坐标变动,这个代码还需要重新更改,如果能够采用id触发就能准确些,方便回归测试。至于怎么实现,我很是迷茫?请各位给予指点 MonkeyImage 有个图片对比的方法sameAs 请问这个方法怎么用,会的给个例子吧!不胜感激! monkeyrunner还有哪些方式可以方便查看错误呢?

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice

from com.android.monkeyrunner.easy import EasyMonkeyDevice

from com.android.monkeyrunner.easy import By

device = MonkeyRunner.waitForConnection('emulator-5554')
MonkeyRunner.sleep(3.0)
easy_device = EasyMonkeyDevice(device)

easy_device.startActivity(component='com.watsons.android/.activity.MainActivity')
#compnent后面的值是你的app和activity的name

easy_device.touch(By.id('id/logoButton'), MonkeyDevice.DOWN_AND_UP)
# 单引号里面的值是id,id可以从开发那边获取,也可以直接去代码里面查看
参考技术A pic1 与 pic2 做图片比较
如果相同则flag = ture, 如果不相同则flag = false
flag = pic1.sameAs(pic2, 1.0)

如何在Leaflet地图多边形上触发事件?

我正在试图弄清楚如何手动触发Leaflet多边形的事件(通过GeoJSON加载)。

简而言之,我有一张带有多个多边形的Leaflet地图。我还在地图外部有一个常规超链接,当点击它时,应该触发特定多边形上的鼠标悬停事件(或任何事件)。

如何为所有多边形分配ID,以便我可以将超链接绑定到特定多边形的事件?或者这甚至是最合乎逻辑的做法?

最终,我正在尝试创建一个包含大量多边形的地图以及与每个多边形相关联的HTML文本标签表。单击HTML表格文本时,我想在地图多边形上触发事件(反之亦然)。我只是不知道如何引用每个多边形。

这是我非常简化的HTML:

<body>

    <div id="map" style="height: 550px; width:940px"></div>

    <a href="#" id="testlink">Click to trigger a specific polygon mouseover event</a>

</body>

这是我非常简化的JS:

$(document).ready(function () {

// build the map and polygon layer
function buildMap(data) {

    var map = new L.Map('map');

    var cloudmadeUrl = 'http://{s}.tile.cloudmade.com/***yourkeyhere***/66267/256/{z}/{x}/{y}.png',
        cloudmadeAttribution = '',
        cloudmade = new L.TileLayer(cloudmadeUrl, {maxZoom: 18, attribution: cloudmadeAttribution});

    var mapLoc = new L.LatLng(43.675198,-79.383287);
    map.setView(mapLoc, 12).addLayer(cloudmade);

    var geojsonLayer = new L.GeoJSON(null, {});

    geojsonLayer.on("featureparse", function (e){

        // apply the polygon style
        e.layer.setStyle(polyStyle);

        (function(layer, properties) {
            layer.on("mouseover", function (e) {
                // change the style to the hover version
                layer.setStyle(polyHover);
                });
            });
            layer.on("mouseout", function (e) {
                // reverting the style back
                layer.setStyle(polyStyle);
            });
            layer.on("click", function (e) {
                // do something here like display a popup
                console.log(e);
            });
        })(e.layer, e.properties);

    });

    map.addLayer(geojsonLayer);

    geojsonLayer.addGeoJSON(myPolygons);    

}

// bind the hyperlink to trigger event on specific polygon (by polygon ID?)
$('#testlink').click(function(){
    // trigger a specific polygon mouseover event here
});

});
答案

好的,我已经弄清楚了。

您需要为打开弹出窗口的每个多边形创建一个单击事件,并为每个多边形分配一个唯一ID,以便稍后引用它并手动触发其弹出窗口。

以下完成此操作:

    var polyindex = 0;

    popup = new L.Popup();

    geojsonLayer = new L.GeoJSON(null, {});

    geojsonLayer.on("featureparse", function (e){

        (function(layer, properties) {

            //click event that triggers the popup and centres it on the polygon
            layer.on("click", function (e) {
                var bounds = layer.getBounds();
                var popupContent = "popup content here";
                popup.setLatLng(bounds.getCenter());
                popup.setContent(popupContent);
                map.openPopup(popup);
            });

        })(e.layer, e.properties);

        //assign polygon id so we can reference it later
        e.layer._leaflet_id = 'polyindex'+polyindex+'';

        //increment polyindex used for unique polygon id's
        polyindex++;
    });

    //add the polygon layer
    map.addLayer(geojsonLayer);
    geojsonLayer.addGeoJSON(neighbourhood_polygons);

然后手动触发特定的图层点击事件,只需调用它:

map._layers['polyindex0'].fire('click');

方括号之间的所有内容都是您要触发的图层的唯一ID。在这种情况下,我正在触发图层ID polyindex0的click事件。

希望这些信息可以帮助别人!

另一答案

所以,快速更新。

只需在您需要的任何层上调用fireEvent(或其别名fire)。

您不需要冒风险._private [Vars],只需获取对目标图层的引用并将其解雇,例如:

var vectorLayer = map.getLayer('myVectorLayer');
vectorLayer.fire('click');
另一答案
function clickMarker(i){
var popupContent = "content here or html format",
popup = new L.Popup({offset:new L.Point(0,-28)});

popup.setLatLng(LatLng);
popup.setContent(popupContent);
map.panTo(LatLng);
map.openPopup(popup); }

i =得到一个相应的坐标,即LatLng

以上是关于monkeyrunner探讨,如何通过id触发事件的主要内容,如果未能解决你的问题,请参考以下文章

monkeyrunner之坐标或控件ID获取方法

最全的MonkeyRunner自动化测试从入门到精通

在 Java/Eclipse 中使用 MonkeyRunner

如何在monkeyrunner中获取菜单标签。?

MonkeyScript测试命令集合

monkeyrunner2