【问题标题】:How to find directive and invoke ng-click with protractor?如何使用量角器查找指令并调用 ng-click?
【发布时间】:2015-10-08 10:47:33
【问题描述】:

我应该找到指令 tile-mini 并在 ng-click 中调用该函数。我该怎么办?

HTML:

<tile-mini data="tableTile" ng-click="addDenuncia()" id="add-denuncia-tile"></tile-mini>

spec.js:

it('Inserimento DU', function() {
  browser.get('/#/valoritalia/admin/denunce-uva/inserimentoDU/all');
  element(by.model('autodichiarazione.viticoltore')).sendKeys('erbaluna 034').sendKeys(protractor.Key.ENTER);
  element(by.css(".button-next")).click();
  element(by.directive("tile-mini")).click();
  browser.pause();
  expect(browser.getTitle()).toBe('Inserimento DU DIONISO');
});

我试过了:

element(by.id("add-complaint-tile")).click ();
element(by.css('[ng-click = "addDenuncia()"]')).click()
directive.element(by.<something>); // Failed: Object [object Object] has no method 'directive'

这些都不起作用..

编辑 1

var elementToFind = by.id("add-denuncia-tile");
browser.wait(function() {
  return browser.isElementPresent(element(elementToFind));
}, 30000).then(function(isPresent){
  if(isPresent){
    element(elementToFind).click();
  }
});

错误:

1) Dioniso Test Case Inserimento DU
  Message:
    Failed: element not visible
      (Session info: chrome=45.0.2454.101)
      (Driver info: chromedriver=2.19.346063 (38b35413bd4a486d436a9749e090454bc9ff6708),platform=Mac OS X 10.11.0 x86_64) (WARNING: The server did not provide any stacktrace information)
    Command duration or timeout: 19 milliseconds
    Build info: version: '2.47.1', revision: '411b314', time: '2015-07-30 03:03:16'
    System info: host: 'YoBre-work.local', ip: '192.168.1.51', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.11', java.version: '1.8.0'
    Driver info: org.openqa.selenium.chrome.ChromeDriver
    Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=/var/folders/7s/f_15rz4d7_d7t6rl6yxkbsk80000gn/T/.org.chromium.Chromium.uHFDeg}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=45.0.2454.101, platform=MAC, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
    Session ID: 7e22695fbe8a4a29cda083576bf34439

【问题讨论】:

    标签: angularjs testing protractor


    【解决方案1】:

    您应该尝试单击元素并将其余部分留给量角器以调用ng-click 上的函数。此外,量角器中没有可以使用的directive 对象。因此,您可以使用 css 或其他元素定位器来单击元素。方法如下-

    element(by.id('add-denuncia-tile')).click(); //Notice the id of the element which is typo in your question
    

    如果它仍然没有点击,那么请确保在点击之前该元素已加载并启用。您可以在量角器中使用elementToBeClickable 等待元素 -

    var elem = element(by.css('[ng-click = "addDenuncia()"]'));
    browser.wait(protractor.ExpectedConditions.elementToBeClickable(elem), 10000).then(function(){
         elem.click();
    });
    

    希望对你有帮助

    【讨论】:

    • @YoBre 我在您的by.id 用法中看到了拼写错误。您是否尝试等到元素出现然后单击它?也是要单击视图中的元素还是需要滚动页面才能单击它?
    • 你是对的!复制粘贴组件的 id 是错误的。我立即更正它并插入不幸的是没有成功的新证明。
    • 视图窗口中的元素是否被点击?还是您必须将页面滚动到元素才能单击它?如果您的元素加载速度非常慢,也请增加您的超时时间,因为我看到您在 19 毫秒内超时。
    猜你喜欢
    • 1970-01-01
    • 2017-03-23
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2014-08-14
    • 1970-01-01
    相关资源
    最近更新 更多