【问题标题】:Angular2 Karma/Protractor - wait for element to become enabledAngular2 Karma/Protractor - 等待元素启用
【发布时间】:2017-03-06 09:53:14
【问题描述】:

在我的 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);
  });

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

【问题讨论】:

    标签: angular protractor karma-runner


    【解决方案1】:

    我发现当条件为真时,我必须使用 .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);
            });
      });
    

    【讨论】:

      【解决方案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);
          });
      

      });

      【讨论】:

        【解决方案3】:

        您应该使用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);
        });
        

        【讨论】:

        • 谢谢你,我已经调查过了,发现 .wait 不是一个阻塞函数。您需要使用 .then 来处理承诺。不过感谢您的提示。
        猜你喜欢
        • 1970-01-01
        • 2017-12-18
        • 1970-01-01
        • 1970-01-01
        • 2018-07-29
        • 2015-01-28
        • 2017-01-22
        • 2016-11-05
        • 2011-12-08
        相关资源
        最近更新 更多