我无法点击量角器中的按钮

时间:2015-08-12 10:56:20

标签: angularjs selenium-webdriver protractor

Html代码

 <button type="button" ng-click="submitPosition($event, true);navigate($event,'/#/project')" class="btn  btn-main" name="submit">CREATE POSITION AND AUTOSOURCE</button>

我的代码。

两个按钮具有相同的类名,因此使用过滤器。

element.all(by.css('button.btn.btn-main')).filter(function(button,index){
            return index == 1;
            }).each(function(button){
            button.click();
            });

我收到此错误

UnknownError: unknown error: Element is not clickable at point (1049, 162). Other element would receive the click: <ul class="modal-breadcrumb list-unstyled block">...</ul>
  (Session info: chrome=43.0.2357.132)

请帮帮我。

3 个答案:

答案 0 :(得分:2)

根据错误,您似乎有一个模式阻止您的点击。没有看到剩下的代码,很难说,但你需要解决这个问题。也就是说,整体问题可能是您的定位策略。在这里使用element(by.cssContainingText('button.btn.btn-main', 'CREATE POSITION AND AUTOSOURCE')); 是过分的,也许试图点击错误的东西?

我会尝试:

$$('button.btn.btn-main').get(1); // assuming index 1 is the button you're after

$('button[name="submit"]');

或者如果它是唯一的提交:

<!-- 1. The <div> tag will contain the <iframe> (and video player) -->  
<div id="player" style="pointer-events: none;"></div>
<script>      // 2. This code loads the IFrame Player API code asynchronously.
      var tag = document.createElement('script');
      tag.src = "http://www.youtube.com/player_api";
      var firstScriptTag = document.getElementsByTagName('script')[0];
      firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

      // 3. This function creates an <iframe> (and YouTube player)
      //    after the API code downloads.
      var player;
      function onYouTubePlayerAPIReady() {
        player = new YT.Player('player', {
          playerVars: { 'autoplay': 1, 'controls': 0,'loop': 1,'playlist': '2oqCAmfc0D0','autohide':1,'showinfo': 0,'disablekb': 1,'rel': 0,'wmode':'opaque' },
          videoId: '2oqCAmfc0D0',
width: '100%',
height: '800px',
          events: {
            'onReady': onPlayerReady}
        });
      }

      // 4. The API will call this function when the video player is ready.
      function onPlayerReady(event) {
        event.target.mute();
      }
</script>

答案 1 :(得分:0)

这可能是由于以下原因造成的,

您要点击的按钮位于页面底部(在页面上不可见)。 你必须向下滚动一下才能在浏览器中显示按钮。然后你可以点击它。

您可以使用mouseMove()首先滚动到元素:

browser.actions().mouseMove(btnSave).click();

使用browser.executeScript()函数进行滚动:

 browser.executeScript('window.scrollTo(0,document.body.scrollHeight);');

您应该为您的按钮指定一个特定ID,并使用by id点击

element(by.id('buttonId')).click();

答案 2 :(得分:0)

我不确定模态最终会消失吗?或者如果你必须点击其他东西让模态消失但我发现使用expected conditions有帮助

var button      = element.all(by.css('button.btn.btn-main')).first();
var IsClickable = EC.elementToBeClickable(button);

browser.wait(IsClickable, 5000, "Failed to click the button").then(function() {
    button.click();
});