首页 > 解决方案 > 量角器:未选择仪表板过滤器

问题描述

我正在使用 Protractor 为我的 Qlik 仪表板进行一些自动化 UI 测试。当前使用此示例仪表板运行一些测试。我打算尝试不同的过滤器组合,看看是否有任何仪表板图表无法呈现。

对于示例仪表板,我打算只单击页面顶部的 4 个过滤器中的每一个,然后选择第一个选项。

出于某种原因,我无法让量角器为我选择过滤器。我总是收到超时错误。

我尝试使用 browser.driver 而不是默认浏览器。我意识到我必须使用 browser.driver.get('url') 否则页面将无法加载。我不知道为什么会这样。

下面显示的是我当前的代码:

describe('Qlik Dashboard Test', function() {
    it('Primary Filter Testing',function(){
        var url = 'https://sense-demo.qlik.com/sso/sense/app/dcb7c95a-9ecd-43e2-8786-cae00108a324/sheet/54b60312-68c5-4d92-a225-79326b68ad5a/state/analysis';
        var EC = protractor.ExpectedConditions;
        // Reference to all filters
        var filter = element.all(by.className('title ng-binding'));
        // Reference to first option in each filter
        var first_opt = element(by.repeater('textItem in item.textItems'));
        // Reference to backbutton
        var bb = element.all(by.className('lui-clear-all lui-icon lui-icon--remove'));
        // Go to website
        browser.driver.get(url);
        // Wait for all filters to be visible
        browser.wait(EC.visibilityOf(filter , 10000));

        // Click on each filter, and select the first avaiable option
        filter.each(function(main_filter){
            browser.actions().mouseMove(main_filter).click().perform().then(function(){
                browser.driver.wait(EC.visibilityOf(first_opt,15000));
            }).then(function(){
                browser.actions().mouseMove(first_opt).click().perform();
            });

        });

        // Click on back button
        bb.each(function(backbutton){
            browser.actions().mouseMove(backbutton).click().perform();
        }).then(function(){
            browser.sleep(2000);
        });


    })
})

这是我不断收到的错误消息:

    Failed: script timeout: result was not received in 11 seconds
      (Session info: chrome=71.0.3578.98)
      (Driver info: chromedriver=2.45.615355 (d5698f682d8b2742017df6c81e0bd8e6a3063189),platform=Mac OS X 10.14.0 x86_64)

任何帮助将不胜感激!

标签: javascriptprotractorautomated-tests

解决方案


设法让它与这个一起工作:

describe('Qlik Dashboard Test', function () {
    it('Primary Filter Testing', async function () {
        await browser.waitForAngularEnabled(false);

        var url = 'https://sense-demo.qlik.com/sso/sense/app/dcb7c95a-9ecd-43e2-8786-cae00108a324/sheet/54b60312-68c5-4d92-a225-79326b68ad5a/state/analysis';
        var EC = protractor.ExpectedConditions;
        var rain = element(by.className('rain rain-loader qv-block-ui ng-scope qv-fade-out'));
        // Reference to all filters
        var filters = element.all(by.css('.title-wrapper'));
        // Reference to backbutton
        var bb = element.all(by.className('lui-clear-all lui-icon lui-icon--remove'));

        // Go to website
        await browser.get(url);
        await browser.wait(EC.presenceOf(filters,15000));
        await browser.wait(EC.invisibilityOf(rain,15000));
        // Wait for all filters to be visible
        let numFilter = await filters.count();
        console.log(numFilter);

        for (let i = 0; i < numFilter; i++) {
            await filters.get(i).click();
            // Reference to first option in each filter
             var first_opt = element(by.repeater('textItem in item.textItems'));
             var all_opt = element.all(by.repeater('textItem in item.textItems'));
             await browser.wait(EC.presenceOf(first_opt, 15000));
             const text = all_opt.get(1).getText();
             console.log(text);
             await first_opt.click();
             await browser.sleep(1000);
        }
    },120000)
})

感谢 DublinDev 提出的同步/异步建议,确实让编写测试变得更加容易。

还编辑了测试的默认预期持续时间,似乎太短了。

似乎有一个 ui 阻塞组件(请参阅 rain 变量),它会阻塞 UI,直到所有内容都加载完毕,所以您只需要等待过滤器在 DOM 中可见,并且 UI 阻塞器消失,然后它'会工作的。


推荐阅读