在弹出窗口上使用量角器测试微调器

时间:2016-03-27 18:52:39

标签: javascript angularjs selenium protractor e2e-testing

在我的Angular应用程序中,我正在使用Protractor编写应用程序的自动化测试套件,我遇到了如何测试微调器,等待微调器从屏幕上消失的问题。 我试图创建一些可重用的函数来处理微调器,看起来它工作正常,但是当微调器位于弹出窗口时,我收到错误:" ...失败:陈旧元素引用:元素未附加到页面文档...",因为我理解量角器无法找到指定的元素,因为在关闭弹出窗口后,微调器从弹出窗口中删除。 在我的函数中,我试图使用这个量角器方法:  browser.wait(EC.invisibilityOf($('#abc')),5000);  browser.wait(spinner.isDisplayed(),5000); 据我所知,原因是browser.wait在循环内部运行,直到它实现或发生超时,但我不知道如何修复它。请帮忙......

我的欲望功能以及额外的礼物检查: this.selector - 父元素(按钮)

waitBtnSpinner() {
    let spinner = this.selector.element(by.css('.btn-spinner'));
    spinner.isPresent().then((isPresent) => {
      if(isPresent) {
        spinner.isDisplayed().then((isDisplayed) => {
          return browser.wait(this.EC.invisibilityOf(spinner), 10000);
        })
      } else {
        return isPresent;
      }
    });
  };

2 个答案:

答案 0 :(得分:0)

更可靠的方法是等待单个选择器返回零可见微调器。 为了在发生故障时提供正确的消息,我将实现“条件”:

var By = webdriver.By;
var EC = webdriver.until;

// define a condition that is true when the locator doesn't match any element
EC.noElement = function (locator, message) {
  return new EC.Condition(message + ' ' + locator, function(driver) {
    return driver.findElements(locator).then(function(elements) {
      return elements.length === 0;
    });
  });
};

// define a condition that is true when there is no visible spinner
EC.noSpinner = EC.noElement(By.css('.spinner[ng-sow]'), 'for no visible spinner');


// usage to wait for no visible spinner
driver.wait(EC.noSpinner, 10000);

请注意,您需要使用与页面中可见微调器匹配的定位器更新Css定位器“.spinner [ng-sow]”。

答案 1 :(得分:0)

试试这个。

 A ob=new B ();
  ((B)ob).C ();

希望这会有所帮助。 :)