如何实施对象'间谍'使用Selenium获取鼠标下的信息?

时间:2017-08-09 11:43:07

标签: selenium selenium-webdriver

我需要创建一个Object spy,即获取鼠标下的元素定位器,而鼠标则由用户控制。我在Selenium API上看到很多methots但找不到合适的。我知道已经有很多工具可以做到这一点,但无论如何需要实现我自己的工具。 任何想法如何使用Selenium实现这一点?感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用以下javascript获取鼠标下的元素xpath。只需在浏览器控制台中粘贴以下代码即可。然后右键单击任何元素,它将在鼠标单击下为元素提供xpath。

document.onclick= function(event) {
    if (event===undefined) event= window.event;                     // IE hack
    var target= 'target' in event? event.target : event.srcElement; // another IE hack

    var root= document.compatMode==='CSS1Compat'? document.documentElement : document.body;
    var mxy= [event.clientX+root.scrollLeft, event.clientY+root.scrollTop];

    var path= getPathTo(target);
    var txy= getPageXY(target);
    alert('Clicked element '+path+' offset '+(mxy[0]-txy[0])+', '+(mxy[1]-txy[1]));
}

function getPathTo(element) {
    if (element.id!=='')
        return 'id("'+element.id+'")';
    if (element===document.body)
        return element.tagName;

    var ix= 0;
    var siblings= element.parentNode.childNodes;
    for (var i= 0; i<siblings.length; i++) {
        var sibling= siblings[i];
        if (sibling===element)
            return getPathTo(element.parentNode)+'/'+element.tagName+'['+(ix+1)+']';
        if (sibling.nodeType===1 && sibling.tagName===element.tagName)
            ix++;
    }
}

function getPageXY(element) {
    var x= 0, y= 0;
    while (element) {
        x+= element.offsetLeft;
        y+= element.offsetTop;
        element= element.offsetParent;
    }
    return [x, y];
}

参考:I'm storing click coordinates in my db and then reloading them later and showing them on the site where the click happened, how do I make sure it loads in the same place?