2015-06-16 4 views
6

Я получаю сообщение об ошибке, которую элемент, на который я пытаюсь нажать, не нажимает, что я не верю.Элемент не может быть нажат в точке - Протрактор

Моя ошибка выглядит:

1) Open VehiclePage and populate data Populate vehicle data 
    Message: 
    UnknownError: unknown error: Element is not clickable at point (1315, 371). Other element would receive the click: <div class="form-con 
rol combo-options ng-scope ng-animate ng-leave ng-leave-active" ng-if="comboBox.visible" on-click-outside="comboBox.hide">...</div> 
(Session info: chrome=39.0.2171.71) 
(Driver info: chromedriver=2.13.307647 (5a7d0541ebc58e69994a6fb2ed930f45261f3c29),platform=Windows NT 6.1 SP1 x86_64) (WARNING: The server 
did not provide any stacktrace information) 
ommand duration or timeout: 30 milliseconds 

Часть моего кода:

it('Populate vehicle data', function() { 
     browser.waitForAngular(); 
     element(by.css('div#datepicking i.glyphicon-calendar')).click(); 
     element(by.css('div#datepicking button[ng-click="select(\'today\')"]')).click(); 
     element(by.model('case.vehicle.adminData.paintColour')).sendKeys(browser.params.paintColour);  
     element(by.xpath('(//*[@id="form-mileage"])')).sendKeys(browser.params.mileage);       
     element(by.id('form-mileage-unit')).click().then(function() { 
      element(by.cssContainingText('option', browser.params.lengthUnit)).click();   
     });; 
     element(by.xpath('(//*[@id="form-residual"])')).sendKeys(browser.params.technicalValue);  
     element(by.id('form-vehicle-condition')).click().then(function() { 
      element(by.cssContainingText('option', browser.params.vehicleCondition)).click(); 
     });;  
     element(by.xpath('(//*[@id="form-engine-type"])')).click().then(function() { 
      element(by.cssContainingText('option', browser.params.motorType)).click(); 
     });; 

HTML этой части выглядит следующим образом:

<div class="col-md-6"> 
       <div> 
        <div class="form-group"> 
         <label for="form-residual" ng-class="{red: !form.residual.$valid}" translate="case.vehicle.adminData.residualValuePercentage" class="ng-scope">Technická hodnota</label> 
          <span popover="Technická hodnota musí být v rozsahu 0-100%" popover-trigger="mouseenter" class="glyphicon glyphicon-question-sign red ng-hide" ng-show="form.residual.$invalid"></span> 
         <div class="input-group"> 
          <input type="number" id="form-residual" ng-model="case.vehicle.adminData.residualValuePercentage" name="residual" class="form-control ng-pristine ng-untouched ng-valid ng-valid-min ng-valid-max" max="100" min="0"> 
          <span class="input-group-addon">%</span> 
         </div> 
        </div> 
       </div> 
       <div> 
        <div class="form-group"> 
         <label for="form-vehicle-condition" translate="case.vehicle.adminData.vehicleCondition" class="ng-scope">Stav vozu</label> 
         <select type="text" id="form-vehicle-condition" ng-model="case.vehicle.adminData.vehicleCondition" name="vehicleCondition" class="form-control ng-pristine ng-valid ng-touched" ng-options="opt.value as opt.label | translate for opt in options.vehicleCondition"><option value="" class=""></option><option value="0" label="Lepší">Lepší</option><option value="1" label="Odpovídající">Odpovídající</option><option value="2" label="Horší">Horší</option><option value="3" label="Není znám">Není znám</option></select> 
        </div> 
       </div> 
      </div> 

приходит ошибка из всегда при попытке нажать элемент (by.id ('form-vehicle-condition'). Есть ли шанс, что кто-то может помочь мне найти выход из Это?

+0

Также проверьте [этот ответ] (http://stackoverflow.com/a/37815727/771848) за то, что вы можете попробовать. – alecxe

ответ

10

Комбинированный номер сообщения об ошибке по-прежнему открыт, когда вы пытаетесь щелкнуть элемент vehicle-condition - скорее всего, из-за его анимации закрытия/исчезновения. Вы можете попробовать отключить анимацию для ваших тестов globally, locally или wait для верхи элемента исчезнуть:

var EC = protractor.ExpectedConditions; 
var element = element(by.id('form-vehicle-condition')); 
var isClickable = EC.elementToBeClickable(element); 
browser.wait(isClickable, 5000); 
element.click(); 
+0

Привет @dmitankin, да, как за 1 минуту до того, как вы напишете это, я узнал, что моя верхняя combox не закрывается быстро enugh :) Правильный ответ и спасибо за потенциальные решения – Andurit

6

Я перепробовал много способов, только

browser.executeScript('arguments[0].click();', element.getWebElement()); 

работает для меня.

+0

что такое аргументы [0] здесь? – ankitd

+0

@ankitdadhich означает первый параметр функции метода. взгляните на https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments –

+2

Вы также можете написать как 'browser.executeScript (function (elem) {elem.click() ;}, element.getWebElement()); '. – hlovdal