量角器 - 其他元素将收到点击

时间:2016-11-18 19:37:44

标签: html protractor

我有一个div放在我需要点击的div之上。两个div都在浏览器窗口中可见,因此无需滚动。那么,我如何点击顶部div下面的底部div?它适用于鼠标,但不适用于Protractor。

快速背景:我们的团队使用包含“选项”的弹出框实现了自定义下拉控件,并在其上方使用滚动条选择“玻璃片”。这样做是为了避免在下拉控件有100多个选项时出现问题。这块玻璃允许您将选项“滚动”到弹出框中。

在Protractor中,我在视口中找到了正确的位置以进行单击,但错误显示我点击了scrollCanvas。

这是伪html:

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

scrollCanvas正在接收点击,但我需要视口来接收点击。任何想法??

提前致谢!

2 个答案:

答案 0 :(得分: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();
        });
    });
});

答案 1 :(得分:0)

    [HttpGet("{id}")]
    public IActionResult GetCity(int id, bool includePointsOfInterest = false)
    {
        var city = _cityInfoRepository.GetCity(id, includePointsOfInterest);

        if (city == null)
        {
            return NotFound();
        }

        if (includePointsOfInterest)
        {
            var cityResult = Mapper.Map<CityDto>(city); 
            return Ok(cityResult);
        }

        var cityWithoutPointsOfInterestResult = Mapper.Map<CityWithoutPointsOfInterestDto>(city);
        return Ok(cityWithoutPointsOfInterestResult);
    }

这会有所帮助!