Angular2 Karma / Protractor - 等待元素启用

时间:2017-03-06 09:53:14

标签: angular protractor karma-runner

在我的Angular2应用程序中,我有一个Karma单元测试,需要等待元素启用。

我的问题是,我不确定如何让测试等待此元素在尝试点击之前启用。

  it('should check the fundDropdown exists', function () {

        browser.get(url);

        var menuStratItem = element(by.xpath('/html/body/alg-app/mainviewer/p-tabview/div/ul/li[2]/a'));

        // Need to wait for this element to become enabled before I try to click it...
        expect(menuStratItem.isEnabled()).toBe(true);

        menuStratItem.click();

        expect(element(by.id('fundDropdown')).isPresent()).toBe(true);
  });

如何在继续测试之前等待此元素启用?

3 个答案:

答案 0 :(得分:2)

我发现当条件成立时我必须使用.then调用来执行代码。完整的答案看起来像这样......

  var url = 'http://uat.viewer3.web.algebris.lan';
  var ec = protractor.ExpectedConditions
  var timeout = 60000;

  it('should check the fundDropdown exists', function () {

        browser.get(url);

        var menuStratItem = element(by.xpath('/html/body/alg-app/mainviewer/p-tabview/div/ul/li[2]/a'));

        browser.wait(ec.elementToBeClickable(menuStratItem), timeout).then(function () {
              expect(menuStratItem.isEnabled()).toBe(true);
              menuStratItem.click();
              expect(element(by.id('fundDropdown')).isPresent()).toBe(true);
        });
  });

答案 1 :(得分:2)

谢谢Ben Cameron。它为我工作。

使用isDisplayed()代替isPresent()总是更好。

 it('should check the fundDropdown exists', function () {

    browser.get(url);

    var menuStratItem = element(by.xpath('/html/body/alg-app/mainviewer/p-tabview/div/ul/li[2]/a'));

    browser.wait(ec.elementToBeClickable(menuStratItem), 10000).then(function () {
          expect(menuStratItem.isEnabled()).toBe(true);
          menuStratItem.click();

       expect(element(by.id('fundDropdown')).isDisplayed()).toBe(true);
    });

});

答案 2 :(得分:0)

您应该使用browser.wait()而不是您目前正在做的事情。这样的事情应该有效:

var ec = protractor.ExpectedConditions
var timeout = 60000;

it('should check the fundDropdown exists', function () {
    browser.get(url);

    var menuStratItem = element(by.xpath('/html/body/alg-app/mainviewer/p-tabview/div/ul/li[2]/a'));

    //use browser.wait to wait for element to be clickable
    browser.wait(ec.elementToBeClickable(menuStratItem), timeout);
    menuStratItem.click();

    expect(element(by.id('fundDropdown')).isPresent()).toBe(true);
});