如何避免双击不同的按钮?

时间:2018-12-19 10:21:23

标签: javascript angular protractor

我的问题不是双击同一按钮而是双击两个按钮。

用户双击按钮。

  • 通过第一个按钮检测到第一次点击
  • 控制器执行操作
  • UI刷新,另一个按钮显示在相同位置
  • 第二个点击被第二个按钮捕获 =>用户不想单击第二个按钮

如何避免这种情况?

我已经测试过:

  • 要在操作期间禁用所有UI按钮
    但是如果操作确实非常快,则在第二次单击之前启用按钮

  • 不要在用户界面的同一位置放置2个按钮
    并非总是可能,并且使用响应式UI不可能管理所有情况

  • 要在点击时添加全局时间戳记,并在第二次点击时测试是否有500毫秒

                _click: function(args)
                {
                    // to avoid double click user need wait 500ms between each click
                    if(window.paperbutton_timestamp)
                    {
                        var diff = new Date() - window.paperbutton_timestamp;                            
                        if(diff < 500)
                        {
                            window.paperbutton_timestamp = new Date();                        
                            return;
                        }
                    }
                    window.paperbutton_timestamp = new Date();                        
    
                    if(scope.click)
                    {
                        scope.click(args);
                    }
                },
    

好的,就可以了。

现在,我的问题是我有很多量角器端到端测试,点击次数超过2000次。 一些量角器的点击操作在不到500毫秒内完成。

我可以使用哪种解决方案?
 1.每次点击后添加一个等待时间
 (更多2000等待手动添加)
 2.在全局变量中设置500ms,并将此值覆盖为0ms
 如何覆盖每个测试和每个页面的刷新?
 3.覆盖量角器单击?
  Seam是更好的解决方案,但我不知道该怎么做。

  • 您还有另一个更好的主意:)吗?

3 个答案:

答案 0 :(得分:1)

通常使用良好的旧式人机交互解决。尝试使用在视觉上对悬停,mousedown和mouseup事件有反应的按钮样式。通常,这足以使用户理解没有必要双击。 Stackoverflow本身有一个很棒的示例:

空闲按钮:

enter image description here

悬停按钮:

enter image description here

鼠标右键:

enter image description here

鼠标键:

enter image description here

但是,如果您真的希望防止不必要的点击,也许最好的方法是在操作期间禁用按钮,而当您要重新启用按钮时,请将此操作置于超时状态,这样禁用的按钮将持续一段时间更长。

另一个建议

您可以实现一个全局函数,以在需要时生成覆盖整个屏幕的不可见div。这将阻止屏幕上的所有内容。

<div style="position:fixed; top:0; left:0; width:100vw; height:100vh; z-index: 10000"></div>

将其放入您的布局文件(通常为app.component.html)中,并实现一个*ngIf,以便仅在必要时显示。另外,其z-index应该大于整个应用程序中任何其他元素的z-index

答案 1 :(得分:1)

您是否考虑过对两个按钮都使用* NgIf **

<button *NgIf="oneActive" (click)="oneActive=false;callfunction()">one</button>
<button *NgIf="!oneActive" (click)="oneActive=true;callfunction2()">two</button>

**

答案 2 :(得分:0)

最好为量角器点击编写自定义函数:

protractor.ElementFinder.prototype.waitClick = function(wait){
  browser.sleep(wait);
  this.click();
};

describe('Tests', function() {
  element.all(by.css('#testElements')).get(0).waitClick(1000)
});

因此,不建议您覆盖默认的点击功能。