确定HTML div是否可点击

时间:2013-09-13 15:14:20

标签: javascript dom selenium listener robotframework

我正在开展一些Selenium / Robot Framework自动化测试,我需要一种方法来自动定位可点击的div标签。

如果我给它一个非常具体的CSS选择器,那么<​​strong> Click Element 关键字可以解决这个问题,但是如何在算法上找到一个可以点击的元素呢?只要有一种获取DOM节点的方法,我希望返回一个可用于调用 Click Element 关键字的唯一选择器。

我知道旧版本的jQuery有$(element).data('events')可能用于查找点击侦听器,但它似乎是一种不可靠的方法。此外,Chrome网络检查员似乎无法识别我正在查看的click的任何div听众。

为了完整起见,这是我正在使用的HTML的一个示例:

<div id="contentarea" class="">
  <div id="contentwrapper" style="opacity: 1;">
    <div class="rap">
      <div id="twocol" class="clearfix margintop">
        <div class="leftcol scrollable addprogram">
          <a href="..." class="newgroup">
            <span class="addicon"></span>New Group
          </a>
        </div>
        <div class="rightcol clearfix">
          <ul class="subtabs rounded clearfix">
            <li data-tab="pending" class="selected">
              <a href="..." class="selected">Released</a>
            </li>
          </ul>
          <div class="clear"></div>
          <div id="program-grid" class="clearfix" style="">
            <div class="program groups" tabindex="0">
              <div class="programframe"></div>
              <div class="programinfo">
                <h1 class="prizeheight">Development</h1>
              </div>
              </div><div class="program groups" tabindex="0">
              <div class="programframe"></div>
              <div class="programinfo">
                <h1 class="prizeheight">Loss Prevention/Safety Group</h1>
              </div>
... 
...

<div class='program groups'>是一个可点击的元素,我希望以编程方式识别。

对于记录,HTML有效等等。缩小的Javascript以某种方式呈现此源,并且可能附加了侦听器。

谢谢!

1 个答案:

答案 0 :(得分:0)

根据this website,这可能是不可能的。

  

注册了哪些事件处理程序?

     

当前实施W3C事件注册的一个问题   model是你无法找出是否已经有任何事件处理程序   注册到元素。在传统模型中,你可以做到:

     

alert(element.onclick),您会看到已注册的功能   它,或如果没有注册任何未定义。只在最近的DOM中   3级事件W3C添加了一个eventListenerList来存储事件列表   当前在元素上注册的处理程序。这个   任何浏览器都不支持这种功能,它太新了。   但是,问题已得到解决。

     

幸运的是,如果事件发生,removeEventListener()不会给出任何错误   你想删除的监听器还没有被添加到元素中,所以当   有疑问,你总是可以使用removeEventListener()。