2016-11-18 77 views
1

我有一个div放在我需要点击div的顶部。这两个div都在浏览器窗口中可见,所以不需要滚动。那么,如何点击顶部div下的底部div?它适用于鼠标,但不适用于量角器。量角器 - 其他元素会收到点击

快速背景:我们的团队实现了一个自定义下拉控件,使用包含“选项”的弹出框进行选择,并使用其中的滚动条选择一个“玻璃片”。这是为了避免下拉控件有100多个选项时出现问题。这块玻璃让你可以将选项“滚动”到弹出窗口中。

在量角器中,我找到了正确的位置在视口点击,但错误说我点击了scrollCanvas。

这里的伪HTML:

<div id="dropdownControl"> 
    <div id="viewport" 
    <div ng-repeat (of the viewable options) 
    ... </div> 
    <div id="scrollCanvas"> 
    ... </div> 
</div> 

的scrollCanvas正在接收的点击,但我需要视收到的点击。有任何想法吗??

在此先感谢!

回答

1

我想通了...终于。诀窍是使用getLocation()获取单元的x,y位置(在另一个div下的div中),然后使用browser.actions()。mouseMove()。click()。perform()。请注意,点击中不使用位置值,因为mouseMove会将调用中的任何x,y作为相对值应用于最后一次鼠标位置。因此,由于鼠标已经位于正确的位置,所有您需要的是在该位置点击()。

下面是一些未精制的,伪代码来说明该技术:

var optionElementFinder = element(by.id('id_of_parent_of_layered_divs')).element(by.id('id_of_div_holding_the_options')); 
optionElementFinder.all(by.repeater('repeater_text_rendering_the_options')).getText().then(function (options) { 
    var myIndex = options.indexOf('text_of_option_to_click'); 
    optionElementFinder.all(by.repeater('repeater_text_rendering_the_options')).then(function (elements) { 
     elements[myIndex].getLocation().then(function() { 
      var canvas = element(by.id('id_of_parent_of_layered_divs')) 
       .element(by.id('id_of_div_holding_the_scrollCanvas')) 
       .getWebElement(); 
      browser.actions() 
       .mouseMove(canvas) 
       .click() 
       .perform(); 
     }); 
    }); 
}); 
相关问题