量角器如何等待选项

时间:2016-02-09 21:06:21

标签: protractor

我有这样的代码:

        element(by.model("roleSelection.role")).element(by.cssContainingText('option', newRole)).click();//.then(function() {console.log('role click')})//;

通过调用服务器加载选项。

我可以通过这样做等待第一个元素

   browser.wait(function() {
return browser.isElementPresent(by.model("roleSelection.role")).then(function(present){
    return present;
});}, 8000);

它似乎有效。但是我怎么能等到“子元素”可以点击。 我试过这个

   browser.wait(function() {
return browser.isElementPresent(by.model("roleSelection.role")).then(function(present){
    if (present) {
        var elm = element(by.model("roleSelection.role"));
        return elm.isElementPresent(by.cssContainingText('option', newRole)).then(function(subpresent) {
            return subpresent;
        });
    }
});   }, 8000);

2 个答案:

答案 0 :(得分:0)

好吧,试试这个:https://angular.github.io/protractor/#/api?view=ExpectedConditions.prototype.elementToBeClickable

但是,请记住,量角器适用于有角度的网页和交互,以及动画。例如ng-animate。因此,它不确定如jquery或其他动画。

这样:

 onPrepare: function () {
    // disable animations when testing to speed things up
    var disableNgAnimate = function () {
      angular.module('disableNgAnimate', []).run(function ($animate) {
        $animate.enabled(false);
      });
    };
    browser.addMockModule('disableNgAnimate', disableNgAnimate);
  }

或者您可以在browser.executeScript()中切换脚本方式。 请参阅此link。它只适用于jquery动画。

如果您没有动画问题。使用setTimeout() JS函数。

答案 1 :(得分:0)

你尝试过点击吗?沿着这些方向的东西

var EC = protractor.ExpectedConditions;
var select = element(by.model("roleSelection.role"))
var isClickable = EC.elementToBeClickable(select);
browser.wait(isClickable,5000); //now options should have been loaded by now